PRIMED Workflow for Group-Based Review
Introduction
This document contains the preliminary data analysis for the meta-analyses with dependent effects (PRIMED) in (Dalgaard et al. 2025). As we conduct separate analyses for reintegration (primary analysis) and mental health (secondary analysis) outcomes, we have divided the tabulation and visualization according to the two types of effect size estimates. In most cases, the main presentation of reintegration outcome data appears in the center column of the document, while the presentation of the mental health outcome data is shown in the right column. Where larger tables or visualizations are required, we have used tabsets to distinguish between reintegration and mental health analyses. To view the mental health presentation, select the ‘Mental health’ tab. To find the mental helath presentation, press on the ‘Mental health’ tab. In a few instances, reintegration and mental health outcomes are tabulated and visualized together to provide an overall view of the relationships between these two types of estimates. All package that we have used to create this document, can be found in the next section.
R packages
Below, we present the R package we use in this document. For exact R package versions, see the Session Information at the bottom of this document.
```{r set-up}
#| cache: false
#| code-fold: false
# Load packages -----------------------------------------------------------
library(knitr)
library(kableExtra)
library(skimr)
library(janitor)
library(tidyverse)
library(tidyr)
library(metafor)
library(clubSandwich)
library(fastDummies)
library(ggrepel)
library(ggExtra)
library(ggridges)
library(MetBrewer)
library(GGally)
library(igraph)
library(fastDummies)
library(patchwork)
library(ggh4x)
```Data manipulation - prepare data sets
In the following section, we create all the variables that are used in the main analyses of the review. Unfold the below code to see this exact manipulations.
Loading data
Show the code
```{r load-data}
# Loading the needed data for analysis
group_based_dat <- readRDS("Group-based interventions data.RDS") |>
# The post-measurement of Empowerment Scale seems flawed for the study by
# Barbic et al. 2009 we therefore we exclude it from the analysis
filter(!(authors == "Barbic et al." & test_name == "The Empowerment Scale")) |>
mutate(
author_year = paste(authors, year),
study = paste(authors, year)
) |>
# Remove unused outcomes
filter(!str_detect(analysis_plan, "Unused"))
```Main variable manipulation
Unfold the below code, to find the primary data manipulation for the overall data, including both all reintegrational as well as mental health outcomes.
Show the code
```{r primary-data-manipultion}
gb_dat <-
group_based_dat |>
# Exclude the two binary outcomes
filter(variable_type != "Binary") |>
mutate(
es_id = 1:n(),
esid = es_id,
# Main covariate adjusted effect cluster adjusted
gt_pop = if_else(!is.na(gt_post), gt_post, NA_real_),
gt_pop = if_else(!is.na(gt_DD), gt_DD, gt_pop),
gt_pop = if_else(!is.na(gt_adj), gt_adj, gt_pop),
gt_pop = if_else(!is.na(gt_reg), gt_reg, gt_pop),
gt_pop = if_else(!is.na(gt_DD_pop), gt_DD_pop, gt_pop),
gt_pop = if_else(!is.na(gt_adj_pop), gt_adj_pop, gt_pop),
vgt_pop = if_else(!is.na(vgt_post), vgt_post, NA_real_),
vgt_pop = if_else(!is.na(vgt_DD), vgt_DD, vgt_pop),
vgt_pop = if_else(!is.na(vgt_adj), vgt_adj, vgt_pop),
vgt_pop = if_else(!is.na(vgt_reg), vgt_reg, vgt_pop),
vgt_pop = if_else(!is.na(vgt_DD_pop), vgt_DD_pop, vgt_pop),
vgt_pop = if_else(!is.na(vgt_adj_pop), vgt_adj_pop, vgt_pop),
Wgt_pop = if_else(!is.na(Wgt_post), Wgt_post, NA_real_),
Wgt_pop = if_else(!is.na(Wgt_DD), Wgt_DD, Wgt_pop),
Wgt_pop = if_else(!is.na(Wgt_adj), Wgt_adj, Wgt_pop),
Wgt_pop = if_else(!is.na(Wgt_reg), Wgt_reg, Wgt_pop),
Wgt_pop = if_else(!is.na(Wgt_DD_pop), Wgt_DD_pop, Wgt_pop),
Wgt_pop = if_else(!is.na(Wgt_adj_pop), Wgt_adj_pop, Wgt_pop),
# Main covariate adjusted effect cluster adjusted
gt = if_else(!is.na(gt_post), gt_post, NA_real_),
gt = if_else(!is.na(gt_DD), gt_DD, gt),
gt = if_else(!is.na(gt_adj), gt_adj, gt),
gt = if_else(!is.na(gt_reg), gt_reg, gt),
vgt = if_else(!is.na(vgt_post), vgt_post, NA_real_),
vgt = if_else(!is.na(vgt_DD), vgt_DD, vgt),
vgt = if_else(!is.na(vgt_adj), vgt_adj, vgt),
vgt = if_else(!is.na(vgt_reg), vgt_reg, vgt),
Wgt = if_else(!is.na(Wgt_post), Wgt_post, NA_real_),
Wgt = if_else(!is.na(Wgt_DD), Wgt_DD, Wgt),
Wgt = if_else(!is.na(Wgt_adj), Wgt_adj, Wgt),
Wgt = if_else(!is.na(Wgt_reg), Wgt_reg, Wgt),
# Hedges g posttest only, adjusted for clustering
# Imputing covariate-adjusted estimate when posttest calculation was not possible
gt_post = if_else(is.na(gt_post) & !is.na(gt_reg), gt_reg, gt_post),
gt_post = if_else(is.na(gt_post) & !is.na(gt_adj), gt_adj, gt_post),
gt_post = if_else(is.na(gt_post) & !is.na(gt_DD), gt_DD, gt_post),
vgt_post = if_else(is.na(vgt_post) & !is.na(vgt_reg), vgt_reg, vgt_post),
vgt_post = if_else(is.na(vgt_post) & !is.na(vgt_adj), vgt_adj, vgt_post),
vgt_post = if_else(is.na(vgt_post) & !is.na(vgt_DD), vgt_DD, vgt_post),
Wgt_post = if_else(is.na(Wgt_post) & !is.na(Wgt_reg), Wgt_reg, Wgt_post),
Wgt_post = if_else(is.na(Wgt_post) & !is.na(Wgt_adj), Wgt_adj, Wgt_post),
Wgt_post = if_else(is.na(Wgt_post) & !is.na(Wgt_DD), Wgt_DD, Wgt_post),
# Hedges' g posttest only, not-adjusted for clustering
# Imputing covariate-adjusted estimate when posttest calculation was not possible
g_post = if_else(is.na(g_post) & !is.na(g_reg), g_reg, g_post),
g_post = if_else(is.na(g_post) & !is.na(g_adj), g_adj, g_post),
g_post = if_else(is.na(g_post) & !is.na(g_DD), g_DD, g_post),
vg_post = if_else(is.na(vg_post) & !is.na(vg_reg), vg_reg, vg_post),
vg_post = if_else(is.na(vg_post) & !is.na(vg_adj), vg_adj, vg_post),
vg_post = if_else(is.na(vg_post) & !is.na(vg_DD), vg_DD, vg_post),
Wg_post = if_else(is.na(Wg_post) & !is.na(Wg_reg), Wg_reg, Wg_post),
Wg_post = if_else(is.na(Wg_post) & !is.na(Wg_adj), Wg_adj, Wg_post),
Wg_post = if_else(is.na(Wg_post) & !is.na(Wg_DD), Wg_DD, Wg_post),
# Cohen's d posttest only, not-adjusted for clustering
# Imputing covariate-adjusted estimate when posttest calculation was not possible
d_post = if_else(is.na(d_post) & !is.na(d_reg), d_reg, d_post),
d_post = if_else(is.na(d_post) & !is.na(d_adj), d_adj, d_post),
d_post = if_else(is.na(d_post) & !is.na(d_DD), d_DD, d_post),
vd_post = if_else(is.na(vd_post) & !is.na(vd_reg), vd_reg, vd_post),
vd_post = if_else(is.na(vd_post) & !is.na(vd_adj), vd_adj, vd_post),
vd_post = if_else(is.na(vd_post) & !is.na(vd_DD), vd_DD, vd_post),
Wd_post = if_else(is.na(Wd_post) & !is.na(Wd_reg), Wd_reg, Wd_post),
Wd_post = if_else(is.na(Wd_post) & !is.na(Wd_adj), Wd_adj, Wd_post),
Wd_post = if_else(is.na(Wd_post) & !is.na(Wd_DD), Wd_DD, Wd_post),
# Covariate adjusted Hedges' g, not cluster adjusted
g = if_else(!is.na(g_post), g_post, NA_real_),
g = if_else(!is.na(g_DD), g_DD, g),
g = if_else(!is.na(g_adj), g_adj, g),
g = if_else(!is.na(g_reg), g_reg, g),
vg = if_else(!is.na(vg_post), vg_post, NA_real_),
vg = if_else(!is.na(vg_DD), vg_DD, vg),
vg = if_else(!is.na(vg_adj), vg_adj, vg),
vg = if_else(!is.na(vg_reg), vg_reg, vg),
Wg = if_else(!is.na(Wg_post), Wg_post, NA_real_),
Wg = if_else(!is.na(Wg_DD), Wg_DD, Wg),
Wg = if_else(!is.na(Wg_adj), Wg_adj, Wg),
Wg = if_else(!is.na(Wg_reg), Wg_reg, Wg),
# Covariate-adjusted version of Cohen's d, neither cluster nor small sample adjusted
d = if_else(!is.na(d_post), d_post, NA_real_),
d = if_else(!is.na(d_DD), d_DD, d),
d = if_else(!is.na(d_adj), d_adj, d),
d = if_else(!is.na(d_reg), d_reg, d),
vd = if_else(!is.na(vd_post), vd_post, NA_real_),
vd = if_else(!is.na(vd_DD), vd_DD, vd),
vd = if_else(!is.na(vd_adj), vd_adj, vd),
vd = if_else(!is.na(vd_reg), vd_reg, vd),
Wd = if_else(!is.na(Wd_post), Wd_post, NA_real_),
Wd = if_else(!is.na(Wd_DD), Wd_DD, Wd),
Wd = if_else(!is.na(Wd_adj), Wd_adj, Wd),
Wd = if_else(!is.na(Wd_reg), Wd_reg, Wd),
inv_sample_size = (1/N_t + 1/N_c),
# ESS = round(4/vgt), # Using cluster bias corrected sampling variance
studyid = if_else(authors == "Gonzalez & Prihoda", 500, studyid),
cnt = if_else(cnt == "USA", "US", cnt),
design = if_else(design == "QES-pretest", "QES", design),
# MHV: Jeg synes ikke det er en god ide at ændre CRCT til RCT. Jeg vil gerne kunne se forskel.
# design = ifelse(design == "CRCT", "RCT", design),
assessment = if_else(assessment == "Self assesment", "Self assesment", assessment),
randomization = if_else(randomization == "Simple Block Randomization", "Block randomized",
randomization),
randomization = if_else(randomization == "Simple with permuted blocks, stratified by site",
"Stratified randomization", randomization),
randomization = if_else(randomization == "Stratified?",
"Stratified randomization", randomization),
randomization = if_else(is.na(randomization) & studyid == 102,
"Stratified randomization", randomization),
randomization = if_else(randomization == "Ratio and block randomized",
"Block randomized", randomization),
randomization = if_else(randomization == "Block randomized stratified by site",
"Block randomized", randomization),
randomization = if_else(randomization == "Resticted and adapted randomization (i.e. minimization)",
"Stratified randomization", randomization),
randomization = if_else(randomization == "Unequal simple randomization",
"Block randomized", randomization),
randomization = if_else(randomization == "Within-site basis and unequal allocation ratio",
"Stratified randomization", randomization),
trt_type = if_else(trt_type == "Group-based Cognitive Behavioral Therapy",
"Group based Cognitive Behavioural Therapy", trt_type),
trt_type = if_else(trt_type == "Group-based Cognitive Behavioral Therapy",
"Group based Cognitive Behavioural Therapy", trt_type),
trt_type = if_else(trt_type =="Group psychoeducation & Social skill training",
"Group psychoeducation & Social Skill Training", trt_type),
trt_type = if_else(trt_type =="Group psychoeducation",
"Group Psychoeducation", trt_type),
trt_type = if_else(trt_type =="Group psychoeducation & Social Skill Training",
"Group Psychoeducation & Social Skill Training", trt_type),
trt_type = if_else(trt_type =="Education and Illness Management",
"Group Psychoeducation & Social Skill Training", trt_type),
trt_type = if_else(trt_type =="Illness management",
"Illness Management", trt_type),
sample_factors = if_else(sample_factors =="Older with depression and anxiety",
"Mixed", sample_factors),
sample_factors = if_else(sample_factors =="All suffered from severe mental illness",
"Shared Social problem(s)/challenge(s)", sample_factors),
sample_factors = if_else(sample_factors =="Shared origin and psychological distress",
"Mixed", sample_factors),
sample_factors = if_else(sample_factors =="persons with major psychiatric problems",
"Shared Social problem(s)/challenge(s)", sample_factors),
analysis_plan = if_else(analysis_plan == "Unused", "Unused outcomes", analysis_plan),
analysis_plan = case_match(
analysis_plan,
"Hope, Empowerment & Self-efficacy" ~ "Hope, empowerment & self-efficacy",
"Wellbeing and Quality of Life" ~ "Wellbeing and quality of life",
"All mental health outcomes" ~ "General mental health",
"All mental health outcomes/Anxiety" ~ "Anxiety",
"All mental health outcomes/Depression" ~ "Depression",
"All mental health outcomes/Symptoms of psychosis" ~ "Symptoms of psychosis",
"All mental health outcomes/Negative symptoms" ~ "Symptoms of psychosis",
.default = analysis_plan
),
test_type = if_else(test_type == "Clinical administered", "Clinician-rated measure", test_type),
test_type = if_else(test_type == "Clinical interviews", "Clinician-rated measure", test_type),
test_type = if_else(test_type == "Self report", "Self-reported", test_type),
test_type = if_else(test_type == "Self report through clinical interview", "Self-reported", test_type),
test_type = if_else(test_type == "Self-reported via diagnostic interview", "Self-reported", test_type),
measure_type = if_else(measure_type == "Pre-post with controls", "Post-intervention", measure_type),
cluster_treatment = if_else(cluster_treatment == "Hierarchical mixed models", "Mixed-model", cluster_treatment),
cluster_treatment = if_else(cluster_treatment == "Multilevel analysis and clustered standard errors",
"Multilevel analysis", cluster_treatment),
rob_tool = if_else(rob_tool == "Rob2", "RoB2", rob_tool),
rob_tool = if_else(rob_tool == "Rob2 CRCT", "RoB2", rob_tool),
analysis_strategy = if_else(str_detect(study, "Michalak"), "ITT", analysis_strategy),
conventional = if_else(protocol != "Yes", 1, 0),
prereg_chr = if_else(conventional == 0, "Preregistered", "Not preregistered"),
# For publication/selection/small study bias testing
Wse = sqrt(Wgt),
t_i = gt/sqrt(Wgt),
outcome_construct = case_match(
analysis_plan,
# Mental health outcomes
c("General mental health", "Anxiety",
"Depression", "Symptoms of psychosis") ~ "Mental health outcome",
.default = "Reintegational outcome"
),
# Changing to numeric vectors
across(c(age_mean_sample:male_pct_t, sessions_per_week), ~as.numeric(.x)),
# Make weighted mean weighted by the group sample size
age_mean = if_else(
is.na(age_mean_sample),
(age_mean_t*N_t + age_mean_c*N_c)/(N_t + N_c),
age_mean_sample
),
male_pct = if_else(
is.na(male_pct_sample),
(male_pct_t*N_t + male_pct_c*N_c)/(N_t + N_c),
male_pct_sample
),
# duration_weeks has extract errors
duration_in_weeks = time_from_baseline_weeks - time_after_end_intervention_weeks,
total_number_of_sessions = round(sessions_per_week * duration_in_weeks),
CBT_int = if_else(trt_group == "group-based CBT", "CBT", "Other"),
QES_design = if_else(design == "QES", "QES", "RCT"),
overall_rob = case_match(
Overall,
c("Serious", "High") ~ "Serious/High",
c("Some concerns", "Moderate") ~ "Some concerns/Moderate",
.default = "Low"
),
overall_rob = factor(overall_rob, levels = c("Low", "Some concerns/Moderate", "Serious/High")),
across(schizophrenia_or_primary_psychotic_disorder:dissociative_identity_disorder, ~ replace_na(.x, 0))
) |>
rowwise() |>
mutate(
diagnosis = {
col_ones <- names(
across(.cols = schizophrenia_or_primary_psychotic_disorder:dissociative_identity_disorder)
)[unlist(
c_across(schizophrenia_or_primary_psychotic_disorder:dissociative_identity_disorder)
) == 1]
n_ones <- length(col_ones)
if (n_ones == 1) col_ones
else if (n_ones > 1) "mixed"
}
) |>
ungroup() |>
mutate(
schizophrenia = if_else(str_detect(diagnosis, "schizophrenia"), "Schizophrenia", "Other")
) |>
mutate(
# Used to remove ITT outcomes from Cano-Vindel et al. 2021 and Craigie & Nathan 2009
n_analysis_strategies = n_distinct(analysis_strategy),
.by = study
) |>
# Removing ITT analyses from Cano-Vindel et al. 2021 and Craigie & Nathan 2009
filter(!c(str_detect(study, "Cano|Craigie|Woj") & analysis_strategy == "ITT"))
```Creating primary and secondary data
Below, we separate the data by reintegrational (primary analysis) and mental health outcomes (secondary analyses)
A general overview of the main data, we use for analyses of reintegrational outcomes can be found in the scroll box below.
Show the code
```{r reint-data}
#| tbl-cap: "Data with reintegration outcomes."
#| tbl-cap-location: top
#| label: tbl-reint-dat
reintegation_dat <-
gb_dat |>
filter(outcome_construct == "Reintegational outcome")
#saveRDS(reintegation_dat, file = "reintegation_dat.rds")
reint_overview <-
reintegation_dat |>
select(
study, eppi_id, esid, N_t, N_c, N_total, inv_sample_size, gt_pop, vgt_pop, Wgt_pop, gt, vgt, Wgt, Wse,
prereg_chr, conventional, analysis_plan, Overall, D5, D7, timing
)
reint_overview |>
mutate(
p_val = 2 * ( 1 - pnorm( abs(gt_pop) / sqrt(vgt_pop) ) )
) |>
select(
`Authors (year)` = study, N_t, N_c,
`Outcome construct` = analysis_plan, gt_pop, vgt_pop, Wgt, Wse, p_val,
`No protocol` = conventional, `Overall RoB` = Overall
) |>
kable(digits=3) |>
kable_styling(
bootstrap_options = c("striped", "hover"),
font_size = 10
) |>
scroll_box(width = "100%", height = "600px", fixed_thead = TRUE)
```| Authors (year) | N_t | N_c | Outcome construct | gt_pop | vgt_pop | Wgt | Wse | p_val | No protocol | Overall RoB |
|---|---|---|---|---|---|---|---|---|---|---|
| Acarturk et al. 2022 | 24 | 22 | Wellbeing and quality of life | 0.314 | 0.196 | 0.195 | 0.442 | 0.478 | 0 | Some concerns |
| Acarturk et al. 2022 | 24 | 22 | Wellbeing and quality of life | -0.103 | 0.091 | 0.091 | 0.301 | 0.733 | 0 | High |
| Barbic et al. 2009 | 16 | 17 | Hope, empowerment & self-efficacy | 0.443 | 0.162 | 0.159 | 0.399 | 0.272 | 1 | Some concerns |
| Barbic et al. 2009 | 16 | 17 | Wellbeing and quality of life | -0.069 | 0.159 | 0.159 | 0.399 | 0.863 | 1 | Some concerns |
| Barbic et al. 2009 | 16 | 17 | Hope, empowerment & self-efficacy | 0.548 | 0.164 | 0.159 | 0.399 | 0.176 | 1 | Some concerns |
| Bond et al. 2015 | 43 | 42 | Hope, empowerment & self-efficacy | 0.000 | 0.094 | 0.094 | 0.306 | 1.000 | 1 | Some concerns |
| Bond et al. 2015 | 43 | 41 | Psychiatric hospitalization | 0.309 | 0.095 | 0.094 | 0.307 | 0.316 | 1 | Some concerns |
| Bækkelund et al. 2022 | 29 | 30 | Social functioning (degree of impairment) | -0.082 | 0.078 | 0.082 | 0.286 | 0.769 | 0 | Low |
| Bækkelund et al. 2022 | 29 | 30 | Social functioning (degree of impairment) | 0.142 | 0.084 | 0.088 | 0.297 | 0.624 | 0 | Low |
| Cano-Vindel et al. 2021 | 315 | 316 | Social functioning (degree of impairment) | 0.259 | 0.006 | 0.006 | 0.080 | 0.001 | 0 | Low |
| Cano-Vindel et al. 2021 | 315 | 316 | Social functioning (degree of impairment) | 0.428 | 0.005 | 0.005 | 0.072 | 0.000 | 0 | Low |
| Cano-Vindel et al. 2021 | 315 | 316 | Social functioning (degree of impairment) | 0.439 | 0.007 | 0.007 | 0.082 | 0.000 | 0 | Low |
| Cano-Vindel et al. 2021 | 315 | 316 | Wellbeing and quality of life | 0.565 | 0.006 | 0.006 | 0.076 | 0.000 | 0 | Low |
| Cano-Vindel et al. 2021 | 315 | 316 | Wellbeing and quality of life | 0.593 | 0.005 | 0.005 | 0.069 | 0.000 | 0 | Low |
| Cano-Vindel et al. 2021 | 315 | 316 | Wellbeing and quality of life | 0.305 | 0.005 | 0.005 | 0.069 | 0.000 | 0 | Low |
| Cano-Vindel et al. 2021 | 315 | 316 | Wellbeing and quality of life | 0.389 | 0.007 | 0.007 | 0.083 | 0.000 | 0 | Low |
| Cano-Vindel et al. 2021 | 273 | 238 | Social functioning (degree of impairment) | 0.066 | 0.008 | 0.008 | 0.088 | 0.450 | 0 | Low |
| Cano-Vindel et al. 2021 | 273 | 238 | Social functioning (degree of impairment) | 0.128 | 0.006 | 0.006 | 0.079 | 0.105 | 0 | Low |
| Cano-Vindel et al. 2021 | 273 | 238 | Social functioning (degree of impairment) | 0.224 | 0.008 | 0.008 | 0.090 | 0.013 | 0 | Low |
| Cano-Vindel et al. 2021 | 273 | 238 | Wellbeing and quality of life | 0.301 | 0.007 | 0.007 | 0.083 | 0.000 | 0 | Low |
| Cano-Vindel et al. 2021 | 273 | 238 | Wellbeing and quality of life | 0.308 | 0.006 | 0.006 | 0.076 | 0.000 | 0 | Low |
| Cano-Vindel et al. 2021 | 273 | 238 | Wellbeing and quality of life | 0.211 | 0.006 | 0.006 | 0.076 | 0.005 | 0 | Low |
| Cano-Vindel et al. 2021 | 273 | 238 | Wellbeing and quality of life | 0.194 | 0.008 | 0.008 | 0.091 | 0.033 | 0 | Low |
| Cano-Vindel et al. 2021 | 229 | 204 | Social functioning (degree of impairment) | 0.342 | 0.009 | 0.009 | 0.095 | 0.000 | 0 | Low |
| Cano-Vindel et al. 2021 | 229 | 204 | Social functioning (degree of impairment) | 0.357 | 0.008 | 0.007 | 0.086 | 0.000 | 0 | Low |
| Cano-Vindel et al. 2021 | 229 | 204 | Social functioning (degree of impairment) | 0.403 | 0.010 | 0.010 | 0.098 | 0.000 | 0 | Low |
| Cano-Vindel et al. 2021 | 229 | 204 | Wellbeing and quality of life | 0.381 | 0.008 | 0.008 | 0.091 | 0.000 | 0 | Low |
| Cano-Vindel et al. 2021 | 229 | 204 | Wellbeing and quality of life | 0.232 | 0.007 | 0.007 | 0.082 | 0.005 | 0 | Low |
| Cano-Vindel et al. 2021 | 229 | 204 | Wellbeing and quality of life | 0.083 | 0.007 | 0.007 | 0.082 | 0.313 | 0 | Low |
| Cano-Vindel et al. 2021 | 229 | 204 | Wellbeing and quality of life | 0.179 | 0.010 | 0.010 | 0.099 | 0.072 | 0 | Low |
| Cano-Vindel et al. 2021 | 208 | 180 | Social functioning (degree of impairment) | 0.455 | 0.010 | 0.010 | 0.101 | 0.000 | 0 | Low |
| Cano-Vindel et al. 2021 | 208 | 180 | Social functioning (degree of impairment) | 0.457 | 0.008 | 0.008 | 0.091 | 0.000 | 0 | Low |
| Cano-Vindel et al. 2021 | 208 | 180 | Social functioning (degree of impairment) | 0.512 | 0.011 | 0.011 | 0.103 | 0.000 | 0 | Low |
| Cano-Vindel et al. 2021 | 208 | 180 | Wellbeing and quality of life | 0.598 | 0.010 | 0.009 | 0.096 | 0.000 | 0 | Low |
| Cano-Vindel et al. 2021 | 208 | 180 | Wellbeing and quality of life | 0.410 | 0.008 | 0.008 | 0.087 | 0.000 | 0 | Low |
| Cano-Vindel et al. 2021 | 208 | 180 | Wellbeing and quality of life | 0.281 | 0.008 | 0.008 | 0.087 | 0.001 | 0 | Low |
| Cano-Vindel et al. 2021 | 208 | 180 | Wellbeing and quality of life | 0.245 | 0.011 | 0.011 | 0.105 | 0.020 | 0 | Low |
| Craigie & Nathan 2009 | 157 | 77 | Wellbeing and quality of life | -0.247 | 0.026 | 0.026 | 0.162 | 0.129 | 1 | Serious |
| Crawford et al. 2012 | 121 | 121 | Social functioning (degree of impairment) | -0.022 | 0.024 | 0.025 | 0.159 | 0.885 | 0 | Low |
| Crawford et al. 2012 | 119 | 121 | Social functioning (degree of impairment) | -0.052 | 0.024 | 0.026 | 0.160 | 0.739 | 0 | Low |
| Crawford et al. 2012 | 121 | 117 | Social functioning (degree of impairment) | -0.039 | 0.019 | 0.020 | 0.141 | 0.779 | 0 | Low |
| Crawford et al. 2012 | 117 | 117 | Social functioning (degree of impairment) | -0.085 | 0.019 | 0.020 | 0.142 | 0.542 | 0 | Low |
| Crawford et al. 2012 | 121 | 121 | Social functioning (degree of impairment) | -0.265 | 0.022 | 0.021 | 0.147 | 0.071 | 0 | Low |
| Crawford et al. 2012 | 119 | 121 | Social functioning (degree of impairment) | -0.137 | 0.022 | 0.022 | 0.147 | 0.352 | 0 | Low |
| Crawford et al. 2012 | 121 | 117 | Social functioning (degree of impairment) | -0.209 | 0.022 | 0.022 | 0.147 | 0.158 | 0 | Low |
| Crawford et al. 2012 | 117 | 117 | Social functioning (degree of impairment) | -0.081 | 0.022 | 0.022 | 0.149 | 0.588 | 0 | Low |
| Crawford et al. 2012 | 121 | 121 | Wellbeing and quality of life | 0.203 | 0.022 | 0.021 | 0.147 | 0.168 | 0 | Low |
| Crawford et al. 2012 | 119 | 121 | Wellbeing and quality of life | 0.074 | 0.022 | 0.022 | 0.147 | 0.616 | 0 | Low |
| Crawford et al. 2012 | 121 | 117 | Wellbeing and quality of life | 0.177 | 0.022 | 0.022 | 0.147 | 0.229 | 0 | Low |
| Crawford et al. 2012 | 117 | 117 | Wellbeing and quality of life | 0.166 | 0.022 | 0.022 | 0.149 | 0.266 | 0 | Low |
| Druss et al. 2010 | 41 | 39 | Wellbeing and quality of life | 0.207 | 0.065 | 0.065 | 0.254 | 0.417 | 0 | High |
| Druss et al. 2010 | 41 | 39 | Wellbeing and quality of life | 0.035 | 0.065 | 0.065 | 0.254 | 0.890 | 0 | High |
| Druss et al. 2018 | 198 | 202 | Hope, empowerment & self-efficacy | 0.204 | 0.013 | 0.013 | 0.114 | 0.074 | 0 | Some concerns |
| Druss et al. 2018 | 198 | 202 | Wellbeing and quality of life | 0.055 | 0.013 | 0.013 | 0.114 | 0.630 | 0 | Some concerns |
| Druss et al. 2018 | 198 | 202 | Wellbeing and quality of life | 0.019 | 0.013 | 0.013 | 0.114 | 0.866 | 0 | Some concerns |
| Druss et al. 2018 | 198 | 202 | Hope, empowerment & self-efficacy | 0.113 | 0.013 | 0.013 | 0.114 | 0.321 | 0 | Some concerns |
| Druss et al. 2018 | 198 | 202 | Wellbeing and quality of life | 0.102 | 0.013 | 0.013 | 0.114 | 0.373 | 0 | Some concerns |
| Druss et al. 2018 | 198 | 202 | Wellbeing and quality of life | 0.169 | 0.013 | 0.013 | 0.114 | 0.140 | 0 | Some concerns |
| Gestel-Timmermans et al. 2012 | 136 | 117 | Hope, empowerment & self-efficacy | 0.193 | 0.014 | 0.014 | 0.118 | 0.103 | 0 | High |
| Gestel-Timmermans et al. 2012 | 121 | 99 | Hope, empowerment & self-efficacy | 0.156 | 0.014 | 0.014 | 0.120 | 0.192 | 0 | High |
| Gestel-Timmermans et al. 2012 | 132 | 118 | Hope, empowerment & self-efficacy | 0.122 | 0.014 | 0.014 | 0.117 | 0.298 | 0 | High |
| Gestel-Timmermans et al. 2012 | 120 | 97 | Hope, empowerment & self-efficacy | 0.348 | 0.017 | 0.017 | 0.129 | 0.008 | 0 | High |
| Gestel-Timmermans et al. 2012 | 138 | 122 | Loneliness | -0.196 | 0.014 | 0.014 | 0.116 | 0.093 | 0 | High |
| Gestel-Timmermans et al. 2012 | 125 | 102 | Loneliness | -0.039 | 0.014 | 0.014 | 0.117 | 0.740 | 0 | High |
| Gestel-Timmermans et al. 2012 | 124 | 114 | Wellbeing and quality of life | -0.045 | 0.011 | 0.011 | 0.106 | 0.675 | 0 | High |
| Gestel-Timmermans et al. 2012 | 111 | 97 | Wellbeing and quality of life | -0.039 | 0.012 | 0.012 | 0.111 | 0.727 | 0 | High |
| Gatz et al. 2007 | 136 | 177 | Alcohol and drug abuse/misuse | 0.094 | 0.023 | 0.022 | 0.150 | 0.531 | 1 | Serious |
| Gatz et al. 2007 | 135 | 176 | Alcohol and drug abuse/misuse | 0.204 | 0.046 | 0.046 | 0.214 | 0.341 | 1 | Serious |
| Gatz et al. 2007 | 134 | 173 | Hope, empowerment & self-efficacy | 0.241 | 0.019 | 0.019 | 0.138 | 0.082 | 1 | Serious |
| Gonzalez & Prihoda 2007 | 8 | 9 | Social functioning (degree of impairment) | 0.206 | 0.287 | 0.189 | 0.434 | 0.701 | 1 | Serious |
| Gordon et al. 2018 | 21 | 15 | Wellbeing and quality of life | 0.258 | 0.142 | 0.141 | 0.375 | 0.494 | 1 | Some concerns |
| Gordon et al. 2018 | 21 | 15 | Social functioning (degree of impairment) | -0.388 | 0.143 | 0.141 | 0.375 | 0.305 | 1 | Some concerns |
| Gordon et al. 2018 | 21 | 15 | Social functioning (degree of impairment) | 0.183 | 0.141 | 0.141 | 0.375 | 0.627 | 1 | Some concerns |
| Gutman et al. 2019 | 10 | 10 | Wellbeing and quality of life | 0.501 | 0.033 | 0.026 | 0.162 | 0.006 | 1 | Serious |
| Hagen et al. 2005 | 14 | 17 | Social functioning (degree of impairment) | -0.039 | 0.174 | 0.174 | 0.418 | 0.925 | 1 | High |
| Haslam et al. 2019 | 66 | 54 | Loneliness | -0.246 | 0.006 | 0.005 | 0.073 | 0.001 | 0 | High |
| Hilden et al. 2021 | 23 | 12 | Physical health | 0.189 | 0.138 | 0.140 | 0.375 | 0.612 | 0 | High |
| Hilden et al. 2021 | 23 | 12 | Alcohol and drug abuse/misuse | 0.070 | 0.140 | 0.140 | 0.375 | 0.852 | 0 | High |
| Hilden et al. 2021 | 23 | 12 | Social functioning (degree of impairment) | -0.283 | 0.142 | 0.140 | 0.375 | 0.452 | 0 | High |
| Hilden et al. 2021 | 23 | 12 | Social functioning (degree of impairment) | 0.434 | 0.143 | 0.140 | 0.375 | 0.252 | 0 | High |
| Hilden et al. 2021 | 23 | 12 | Social functioning (degree of impairment) | 0.036 | 0.140 | 0.140 | 0.375 | 0.924 | 0 | High |
| Himle et al. 2014 | 29 | 29 | Physical health | 0.507 | 0.083 | 0.083 | 0.288 | 0.079 | 0 | Some concerns |
| Himle et al. 2014 | 29 | 29 | Social functioning (degree of impairment) | 0.464 | 0.085 | 0.083 | 0.288 | 0.111 | 0 | Some concerns |
| Himle et al. 2014 | 29 | 29 | Physical health | 0.523 | 0.083 | 0.083 | 0.288 | 0.070 | 0 | Some concerns |
| Himle et al. 2014 | 29 | 29 | Social functioning (degree of impairment) | 0.819 | 0.089 | 0.083 | 0.288 | 0.006 | 0 | Some concerns |
| Jacob et al. 2010 | 19 | 24 | Self-esteem | 0.495 | 0.120 | 0.116 | 0.341 | 0.152 | 1 | Serious |
| Jacob et al. 2010 | 19 | 24 | Self-esteem | 0.442 | 0.119 | 0.116 | 0.341 | 0.200 | 1 | Serious |
| Jacob et al. 2010 | 19 | 24 | Self-esteem | 0.133 | 0.117 | 0.116 | 0.341 | 0.697 | 1 | Serious |
| Jacob et al. 2010 | 19 | 24 | Self-esteem | 0.053 | 0.116 | 0.116 | 0.341 | 0.876 | 1 | Serious |
| Jacob et al. 2010 | 19 | 24 | Self-esteem | 0.392 | 0.118 | 0.116 | 0.341 | 0.255 | 1 | Serious |
| Jacob et al. 2010 | 19 | 24 | Self-esteem | 0.433 | 0.119 | 0.116 | 0.341 | 0.209 | 1 | Serious |
| Jacob et al. 2010 | 19 | 24 | Self-esteem | 0.222 | 0.117 | 0.116 | 0.341 | 0.516 | 1 | Serious |
| Jacob et al. 2010 | 19 | 24 | Self-esteem | -0.121 | 0.117 | 0.116 | 0.341 | 0.724 | 1 | Serious |
| James et al. 2004 | 29 | 29 | Alcohol and drug abuse/misuse | 1.120 | 0.094 | 0.083 | 0.288 | 0.000 | 1 | Some concerns |
| James et al. 2004 | 29 | 29 | Alcohol and drug abuse/misuse | 0.281 | 0.083 | 0.083 | 0.288 | 0.331 | 1 | Some concerns |
| James et al. 2004 | 28 | 29 | Alcohol and drug abuse/misuse | 0.538 | 0.087 | 0.085 | 0.291 | 0.069 | 1 | Some concerns |
| Kanie et al. 2019 | 32 | 29 | Social functioning (degree of impairment) | -0.177 | 0.075 | 0.078 | 0.279 | 0.517 | 0 | Low |
| Kanie et al. 2019 | 32 | 29 | Social functioning (degree of impairment) | 0.037 | 0.078 | 0.078 | 0.279 | 0.896 | 0 | Low |
| Lim et al. 2020 | 18 | 21 | Wellbeing and quality of life | 0.862 | 0.148 | 0.137 | 0.371 | 0.025 | 1 | Serious |
| Lloyd-Evans et al. 2020 | 25 | 10 | Loneliness | 0.103 | 0.158 | 0.158 | 0.398 | 0.796 | 0 | Low |
| Lloyd-Evans et al. 2020 | 25 | 10 | Wellbeing and quality of life | 0.214 | 0.159 | 0.158 | 0.398 | 0.591 | 0 | Low |
| Madigan et al. 2013 | 36 | 18 | Alcohol and drug abuse/misuse | 0.024 | 0.097 | 0.097 | 0.312 | 0.940 | 1 | Some concerns |
| Madigan et al. 2013 | 39 | 19 | Social functioning (degree of impairment) | 0.038 | 0.087 | 0.091 | 0.302 | 0.898 | 1 | Some concerns |
| Madigan et al. 2013 | 34 | 15 | Wellbeing and quality of life | 0.490 | 0.113 | 0.110 | 0.332 | 0.144 | 1 | Some concerns |
| Madigan et al. 2013 | 28 | 14 | Alcohol and drug abuse/misuse | 0.049 | 0.125 | 0.125 | 0.354 | 0.891 | 1 | Some concerns |
| Madigan et al. 2013 | 31 | 16 | Social functioning (degree of impairment) | 0.008 | 0.106 | 0.111 | 0.333 | 0.982 | 1 | Some concerns |
| Madigan et al. 2013 | 34 | 14 | Wellbeing and quality of life | 0.677 | 0.119 | 0.114 | 0.338 | 0.050 | 1 | Some concerns |
| McCay et al. 2006 | 26 | 14 | Self-esteem | 0.521 | 0.052 | 0.048 | 0.219 | 0.022 | 1 | Serious |
| McCay et al. 2006 | 26 | 14 | Wellbeing and quality of life | 0.129 | 0.109 | 0.108 | 0.329 | 0.694 | 1 | Serious |
| McCay et al. 2007 | 29 | 18 | Self-esteem | 0.386 | 0.018 | 0.016 | 0.128 | 0.004 | 1 | High |
| McCay et al. 2007 | 29 | 18 | Wellbeing and quality of life | 0.509 | 0.019 | 0.016 | 0.126 | 0.000 | 1 | High |
| McCay et al. 2007 | 29 | 18 | Hope, empowerment & self-efficacy | 0.400 | 0.021 | 0.019 | 0.137 | 0.005 | 1 | High |
| Michalak et al. 2015 | 36 | 35 | Wellbeing and quality of life | 0.299 | 0.055 | 0.054 | 0.233 | 0.203 | 0 | Some concerns |
| Michalak et al. 2015 | 35 | 35 | Wellbeing and quality of life | 0.349 | 0.033 | 0.032 | 0.180 | 0.056 | 0 | Some concerns |
| Michalak et al. 2015 | 36 | 35 | Wellbeing and quality of life | 0.115 | 0.032 | 0.031 | 0.177 | 0.519 | 0 | Some concerns |
| Michalak et al. 2015 | 35 | 35 | Wellbeing and quality of life | 0.329 | 0.037 | 0.036 | 0.190 | 0.087 | 0 | Some concerns |
| Michalak et al. 2015 | 36 | 35 | Wellbeing and quality of life | 0.472 | 0.054 | 0.052 | 0.229 | 0.043 | 0 | Some concerns |
| Michalak et al. 2015 | 35 | 35 | Wellbeing and quality of life | 0.410 | 0.044 | 0.043 | 0.207 | 0.052 | 0 | Some concerns |
| Michalak et al. 2015 | 36 | 35 | Wellbeing and quality of life | 0.134 | 0.039 | 0.038 | 0.196 | 0.495 | 0 | Some concerns |
| Michalak et al. 2015 | 35 | 35 | Wellbeing and quality of life | 0.270 | 0.035 | 0.035 | 0.186 | 0.151 | 0 | Some concerns |
| Michalak et al. 2015 | 36 | 35 | Social functioning (degree of impairment) | 0.567 | 0.055 | 0.052 | 0.229 | 0.015 | 0 | Some concerns |
| Michalak et al. 2015 | 35 | 35 | Social functioning (degree of impairment) | 0.389 | 0.045 | 0.044 | 0.209 | 0.066 | 0 | Some concerns |
| Morley et al. 2014 | 122 | 63 | Hope, empowerment & self-efficacy | 0.296 | 0.028 | 0.027 | 0.166 | 0.075 | 1 | Some concerns |
| Morton et al. 2012 | 21 | 20 | Hope, empowerment & self-efficacy | 0.985 | 0.091 | 0.078 | 0.279 | 0.001 | 1 | Some concerns |
| Patterson et al. 2003 | 16 | 16 | Wellbeing and quality of life | 0.109 | 0.163 | 0.162 | 0.403 | 0.788 | 1 | Some concerns |
| Patterson et al. 2003 | 16 | 16 | Wellbeing and quality of life | -0.268 | 0.164 | 0.162 | 0.403 | 0.508 | 1 | Some concerns |
| Rabenstein et al. 2016 | 153 | 148 | Wellbeing and quality of life | 0.415 | 0.018 | 0.018 | 0.133 | 0.002 | 1 | Moderate |
| Rosenblum et al. 2014 | 91 | 70 | Alcohol and drug abuse/misuse | 0.129 | 0.032 | 0.032 | 0.178 | 0.468 | 0 | Some concerns |
| Rosenblum et al. 2014 | 91 | 70 | Alcohol and drug abuse/misuse | 0.325 | 0.032 | 0.032 | 0.178 | 0.069 | 0 | Some concerns |
| Rosenblum et al. 2014 | 91 | 70 | Alcohol and drug abuse/misuse | 0.168 | 0.032 | 0.032 | 0.178 | 0.345 | 0 | Some concerns |
| Rosenblum et al. 2014 | 91 | 70 | Alcohol and drug abuse/misuse | 0.178 | 0.032 | 0.032 | 0.178 | 0.318 | 0 | Some concerns |
| Russinova et al. 2018 | 22 | 26 | Hope, empowerment & self-efficacy | 0.131 | 0.112 | 0.112 | 0.334 | 0.696 | 1 | Some concerns |
| Russinova et al. 2018 | 22 | 26 | Self-esteem | 0.716 | 0.118 | 0.112 | 0.334 | 0.037 | 1 | Some concerns |
| Russinova et al. 2018 | 22 | 26 | Hope, empowerment & self-efficacy | 0.101 | 0.112 | 0.112 | 0.334 | 0.762 | 1 | Some concerns |
| Russinova et al. 2018 | 22 | 26 | Employment | 0.296 | 0.113 | 0.112 | 0.334 | 0.378 | 1 | Some concerns |
| Russinova et al. 2018 | 21 | 24 | Hope, empowerment & self-efficacy | -0.117 | 0.119 | 0.118 | 0.344 | 0.733 | 1 | Some concerns |
| Russinova et al. 2018 | 22 | 25 | Hope, empowerment & self-efficacy | 0.181 | 0.114 | 0.113 | 0.337 | 0.591 | 1 | Some concerns |
| Russinova et al. 2018 | 22 | 25 | Self-esteem | 0.225 | 0.114 | 0.113 | 0.337 | 0.505 | 1 | Some concerns |
| Russinova et al. 2018 | 22 | 25 | Hope, empowerment & self-efficacy | -0.113 | 0.113 | 0.113 | 0.337 | 0.737 | 1 | Some concerns |
| Russinova et al. 2018 | 22 | 25 | Employment | 0.030 | 0.113 | 0.113 | 0.337 | 0.930 | 1 | Some concerns |
| Russinova et al. 2018 | 21 | 24 | Hope, empowerment & self-efficacy | 0.000 | 0.118 | 0.118 | 0.344 | 1.000 | 1 | Some concerns |
| Rüsch et al. 2019 | 18 | 17 | Hope, empowerment & self-efficacy | 0.333 | 0.104 | 0.102 | 0.319 | 0.301 | 0 | Some concerns |
| Rüsch et al. 2019 | 18 | 17 | Hope, empowerment & self-efficacy | -0.094 | 0.057 | 0.057 | 0.239 | 0.694 | 0 | Some concerns |
| Rüsch et al. 2019 | 18 | 17 | Hope, empowerment & self-efficacy | 0.650 | 0.125 | 0.118 | 0.344 | 0.066 | 0 | Some concerns |
| Rüsch et al. 2019 | 18 | 17 | Self-esteem | 0.511 | 0.035 | 0.031 | 0.177 | 0.006 | 0 | Some concerns |
| Rüsch et al. 2019 | 18 | 17 | Hope, empowerment & self-efficacy | 0.522 | 0.107 | 0.103 | 0.321 | 0.111 | 0 | Some concerns |
| Rüsch et al. 2019 | 20 | 13 | Hope, empowerment & self-efficacy | 0.196 | 0.155 | 0.154 | 0.393 | 0.618 | 0 | Some concerns |
| Rüsch et al. 2019 | 20 | 13 | Hope, empowerment & self-efficacy | -0.258 | 0.155 | 0.154 | 0.393 | 0.512 | 0 | Some concerns |
| Rüsch et al. 2019 | 20 | 13 | Hope, empowerment & self-efficacy | 0.772 | 0.391 | 0.381 | 0.617 | 0.217 | 0 | Some concerns |
| Rüsch et al. 2019 | 20 | 13 | Self-esteem | 0.338 | 0.094 | 0.092 | 0.304 | 0.271 | 0 | Some concerns |
| Rüsch et al. 2019 | 20 | 13 | Hope, empowerment & self-efficacy | 0.724 | 0.274 | 0.266 | 0.515 | 0.167 | 0 | Some concerns |
| Sacks et al. 2011 | 38 | 38 | Wellbeing and quality of life | 0.074 | 0.068 | 0.068 | 0.262 | 0.779 | 1 | Some concerns |
| Sacks et al. 2011 | 38 | 38 | Wellbeing and quality of life | -0.269 | 0.069 | 0.068 | 0.262 | 0.305 | 1 | Some concerns |
| Sacks et al. 2011 | 38 | 38 | Wellbeing and quality of life | 0.953 | 0.075 | 0.068 | 0.262 | 0.000 | 1 | Some concerns |
| Sajatovic et al. 2009 | 61 | 61 | Social functioning (degree of impairment) | 0.220 | 0.041 | 0.041 | 0.202 | 0.279 | 1 | Some concerns |
| Sajatovic et al. 2009 | 46 | 53 | Social functioning (degree of impairment) | 0.086 | 0.052 | 0.052 | 0.228 | 0.706 | 1 | Some concerns |
| Sajatovic et al. 2009 | 40 | 39 | Social functioning (degree of impairment) | 0.059 | 0.063 | 0.063 | 0.251 | 0.815 | 1 | Some concerns |
| Schrank et al. 2016 | 43 | 41 | Wellbeing and quality of life | -0.104 | 0.062 | 0.061 | 0.248 | 0.675 | 0 | Low |
| Schrank et al. 2016 | 43 | 41 | Wellbeing and quality of life | 0.445 | 0.063 | 0.061 | 0.248 | 0.076 | 0 | Low |
| Schrank et al. 2016 | 43 | 41 | Hope, empowerment & self-efficacy | -0.341 | 0.062 | 0.061 | 0.248 | 0.171 | 0 | Low |
| Schrank et al. 2016 | 43 | 41 | Hope, empowerment & self-efficacy | 0.021 | 0.061 | 0.061 | 0.248 | 0.932 | 0 | Low |
| Schrank et al. 2016 | 43 | 41 | Hope, empowerment & self-efficacy | 0.148 | 0.062 | 0.061 | 0.248 | 0.550 | 0 | Low |
| Schäfer et al. 2019 | 115 | 117 | Alcohol and drug abuse/misuse | 0.144 | 0.023 | 0.022 | 0.150 | 0.339 | 0 | Some concerns |
| Schäfer et al. 2019 | 111 | 117 | Alcohol and drug abuse/misuse | 0.151 | 0.023 | 0.023 | 0.152 | 0.321 | 0 | Some concerns |
| Schäfer et al. 2019 | 115 | 117 | Alcohol and drug abuse/misuse | 0.346 | 0.023 | 0.022 | 0.150 | 0.022 | 0 | Some concerns |
| Schäfer et al. 2019 | 111 | 117 | Alcohol and drug abuse/misuse | -0.036 | 0.023 | 0.023 | 0.152 | 0.813 | 0 | Some concerns |
| Schäfer et al. 2019 | 115 | 117 | Alcohol and drug abuse/misuse | 0.223 | 0.023 | 0.022 | 0.150 | 0.138 | 0 | Some concerns |
| Schäfer et al. 2019 | 111 | 117 | Alcohol and drug abuse/misuse | 0.148 | 0.023 | 0.023 | 0.152 | 0.329 | 0 | Some concerns |
| Schäfer et al. 2019 | 115 | 117 | Alcohol and drug abuse/misuse | 0.088 | 0.022 | 0.022 | 0.150 | 0.558 | 0 | Some concerns |
| Schäfer et al. 2019 | 111 | 117 | Alcohol and drug abuse/misuse | 0.000 | 0.023 | 0.023 | 0.152 | 1.000 | 0 | Some concerns |
| Schäfer et al. 2019 | 115 | 117 | Alcohol and drug abuse/misuse | 0.369 | 0.023 | 0.022 | 0.150 | 0.015 | 0 | Some concerns |
| Schäfer et al. 2019 | 111 | 117 | Alcohol and drug abuse/misuse | 0.184 | 0.023 | 0.023 | 0.152 | 0.226 | 0 | Some concerns |
| Schäfer et al. 2019 | 115 | 117 | Alcohol and drug abuse/misuse | 0.264 | 0.023 | 0.022 | 0.150 | 0.079 | 0 | Some concerns |
| Schäfer et al. 2019 | 111 | 117 | Alcohol and drug abuse/misuse | 0.084 | 0.023 | 0.023 | 0.152 | 0.579 | 0 | Some concerns |
| Schäfer et al. 2019 | 115 | 117 | Alcohol and drug abuse/misuse | -0.306 | 0.023 | 0.022 | 0.150 | 0.042 | 0 | Some concerns |
| Schäfer et al. 2019 | 111 | 117 | Alcohol and drug abuse/misuse | -0.074 | 0.023 | 0.023 | 0.152 | 0.625 | 0 | Some concerns |
| Schäfer et al. 2019 | 115 | 117 | Alcohol and drug abuse/misuse | -0.495 | 0.023 | 0.022 | 0.150 | 0.001 | 0 | Some concerns |
| Schäfer et al. 2019 | 111 | 117 | Alcohol and drug abuse/misuse | -0.249 | 0.023 | 0.023 | 0.152 | 0.101 | 0 | Some concerns |
| Schäfer et al. 2019 | 115 | 117 | Alcohol and drug abuse/misuse | -0.249 | 0.023 | 0.022 | 0.150 | 0.097 | 0 | Some concerns |
| Schäfer et al. 2019 | 111 | 117 | Alcohol and drug abuse/misuse | -0.080 | 0.023 | 0.023 | 0.152 | 0.600 | 0 | Some concerns |
| Somers et al. 2017 | 90 | 100 | Social functioning (degree of impairment) | 0.252 | 0.034 | 0.034 | 0.184 | 0.172 | 0 | Low |
| Somers et al. 2017 | 90 | 100 | Social functioning (degree of impairment) | 0.661 | 0.044 | 0.043 | 0.208 | 0.002 | 0 | Low |
| Somers et al. 2017 | 90 | 100 | Alcohol and drug abuse/misuse | -0.143 | 0.041 | 0.041 | 0.203 | 0.480 | 0 | Low |
| Somers et al. 2017 | 90 | 100 | Wellbeing and quality of life | 0.250 | 0.034 | 0.033 | 0.183 | 0.172 | 0 | Low |
| Tjaden et al. 2021 | 70 | 67 | Hope, empowerment & self-efficacy | 0.353 | 0.038 | 0.038 | 0.194 | 0.071 | 0 | Low |
| Tjaden et al. 2021 | 70 | 67 | Wellbeing and quality of life | 0.082 | 0.038 | 0.038 | 0.194 | 0.672 | 0 | Low |
| Tjaden et al. 2021 | 70 | 67 | Social functioning (degree of impairment) | -0.213 | 0.036 | 0.038 | 0.194 | 0.262 | 0 | Low |
| Tjaden et al. 2021 | 63 | 58 | Hope, empowerment & self-efficacy | 0.532 | 0.044 | 0.042 | 0.206 | 0.011 | 0 | Low |
| Tjaden et al. 2021 | 63 | 58 | Wellbeing and quality of life | -0.032 | 0.042 | 0.042 | 0.206 | 0.875 | 0 | Low |
| Tjaden et al. 2021 | 63 | 58 | Social functioning (degree of impairment) | 0.008 | 0.041 | 0.042 | 0.206 | 0.970 | 0 | Low |
| Valiente et al. 2022 | 52 | 61 | Wellbeing and quality of life | 0.150 | 0.048 | 0.047 | 0.218 | 0.492 | 0 | Low |
| Valiente et al. 2022 | 52 | 61 | Wellbeing and quality of life | 0.104 | 0.048 | 0.047 | 0.218 | 0.632 | 0 | Low |
| Valiente et al. 2022 | 52 | 61 | Wellbeing and quality of life | 0.138 | 0.048 | 0.047 | 0.218 | 0.526 | 0 | Low |
| Valiente et al. 2022 | 52 | 61 | Wellbeing and quality of life | 0.325 | 0.048 | 0.047 | 0.218 | 0.137 | 0 | Low |
| Valiente et al. 2022 | 52 | 61 | Wellbeing and quality of life | 0.136 | 0.048 | 0.047 | 0.218 | 0.534 | 0 | Low |
| Valiente et al. 2022 | 52 | 61 | Wellbeing and quality of life | 0.028 | 0.047 | 0.047 | 0.218 | 0.897 | 0 | Low |
| Valiente et al. 2022 | 52 | 61 | Wellbeing and quality of life | -0.172 | 0.048 | 0.047 | 0.218 | 0.430 | 0 | Low |
| Volpe et al. 2015 | 21 | 20 | Social functioning (degree of impairment) | 0.092 | 0.126 | 0.126 | 0.355 | 0.795 | 1 | Some concerns |
| Volpe et al. 2015 | 21 | 20 | Social functioning (degree of impairment) | 1.355 | 0.150 | 0.126 | 0.355 | 0.000 | 1 | Some concerns |
| Wojtalik et al. 2022 | 26 | 23 | Social functioning (degree of impairment) | 0.105 | 0.089 | 0.089 | 0.299 | 0.725 | 0 | Low |
| Smith et al. 2021 | 27 | 35 | Loneliness | 0.679 | 0.093 | 0.089 | 0.298 | 0.026 | 0 | High |
| Wuthrich & Rapee 2013 | 27 | 35 | Wellbeing and quality of life | 0.511 | 0.091 | 0.089 | 0.298 | 0.090 | 0 | Some concerns |
A general overview of the main data, we use for analyses of mental health outcomes can be found the scroll box below.
Show the code
```{r mental-data}
#| tbl-cap: "Data with mental health outcomes."
#| tbl-cap-location: top
#| label: tbl-mental-dat
mental_health_dat <-
gb_dat |>
filter(outcome_construct == "Mental health outcome")
#saveRDS(mental_health_dat, file = "mental_health_dat.rds")
mental_overview_dat <-
mental_health_dat |>
select(
study, eppi_id, esid, N_t, N_c, N_total, inv_sample_size, gt_pop, vgt_pop, Wgt_pop, gt, vgt, Wgt, Wse,
prereg_chr, conventional, analysis_plan, Overall, D5, D7, timing
)
mental_overview_dat |>
mutate(
p_val = 2 * ( 1 - pnorm( abs(gt_pop) / sqrt(vgt_pop) ) )
) |>
select(
`Authors (year)` = study, N_t, N_c,
`Outcome construct` = analysis_plan, gt_pop, vgt_pop, Wgt, Wse, p_val,
`No protocol` = conventional, `Overall RoB` = Overall
) |>
kable(digits=3) |>
kable_styling(
bootstrap_options = c("striped", "hover"),
font_size = 10
) |>
scroll_box(width = "100%", height = "300px", fixed_thead = TRUE)
```| Authors (year) | N_t | N_c | Outcome construct | gt_pop | vgt_pop | Wgt | Wse | p_val | No protocol | Overall RoB |
|---|---|---|---|---|---|---|---|---|---|---|
| Acarturk et al. 2022 | 24 | 22 | General mental health | 0.534 | 0.087 | 0.084 | 0.289 | 0.070 | 0 | Some concerns |
| Acarturk et al. 2022 | 24 | 22 | General mental health | 0.257 | 0.093 | 0.092 | 0.303 | 0.398 | 0 | High |
| Acarturk et al. 2022 | 24 | 22 | General mental health | 0.559 | 0.135 | 0.131 | 0.362 | 0.128 | 0 | Some concerns |
| Acarturk et al. 2022 | 24 | 22 | General mental health | 0.339 | 0.134 | 0.133 | 0.364 | 0.354 | 0 | High |
| Bækkelund et al. 2022 | 29 | 30 | General mental health | 0.112 | 0.163 | 0.163 | 0.403 | 0.782 | 0 | Low |
| Bækkelund et al. 2022 | 29 | 30 | General mental health | 0.100 | 0.140 | 0.140 | 0.375 | 0.789 | 0 | Low |
| Cano-Vindel et al. 2021 | 315 | 316 | Anxiety | 0.906 | 0.004 | 0.003 | 0.054 | 0.000 | 0 | Low |
| Cano-Vindel et al. 2021 | 315 | 316 | Depression | 0.755 | 0.005 | 0.001 | 0.032 | 0.000 | 0 | Low |
| Cano-Vindel et al. 2021 | 315 | 316 | General mental health | 0.611 | 0.007 | 0.007 | 0.083 | 0.000 | 0 | Low |
| Cano-Vindel et al. 2021 | 273 | 238 | Anxiety | 0.493 | 0.004 | 0.004 | 0.059 | 0.000 | 0 | Low |
| Cano-Vindel et al. 2021 | 273 | 238 | Depression | 0.434 | 0.002 | 0.001 | 0.035 | 0.000 | 0 | Low |
| Cano-Vindel et al. 2021 | 273 | 238 | General mental health | 0.467 | 0.009 | 0.008 | 0.091 | 0.000 | 0 | Low |
| Cano-Vindel et al. 2021 | 229 | 204 | Anxiety | 0.552 | 0.005 | 0.004 | 0.065 | 0.000 | 0 | Low |
| Cano-Vindel et al. 2021 | 229 | 204 | Depression | 0.466 | 0.003 | 0.001 | 0.038 | 0.000 | 0 | Low |
| Cano-Vindel et al. 2021 | 229 | 204 | General mental health | 0.459 | 0.010 | 0.010 | 0.099 | 0.000 | 0 | Low |
| Cano-Vindel et al. 2021 | 208 | 180 | Anxiety | 0.580 | 0.005 | 0.005 | 0.068 | 0.000 | 0 | Low |
| Cano-Vindel et al. 2021 | 208 | 180 | Depression | 0.450 | 0.003 | 0.002 | 0.040 | 0.000 | 0 | Low |
| Cano-Vindel et al. 2021 | 208 | 180 | General mental health | 0.551 | 0.011 | 0.011 | 0.105 | 0.000 | 0 | Low |
| Craigie & Nathan 2009 | 157 | 77 | Depression | -0.498 | 0.025 | 0.022 | 0.150 | 0.002 | 1 | Serious |
| Craigie & Nathan 2009 | 157 | 77 | Anxiety | -0.549 | 0.022 | 0.021 | 0.145 | 0.000 | 1 | Serious |
| Crawford et al. 2012 | 121 | 121 | Symptoms of psychosis | 0.155 | 0.040 | 0.040 | 0.200 | 0.439 | 0 | Low |
| Crawford et al. 2012 | 119 | 121 | Symptoms of psychosis | 0.007 | 0.040 | 0.040 | 0.201 | 0.974 | 0 | Low |
| Crawford et al. 2012 | 121 | 117 | Symptoms of psychosis | 0.152 | 0.040 | 0.040 | 0.200 | 0.446 | 0 | Low |
| Crawford et al. 2012 | 117 | 117 | Symptoms of psychosis | 0.024 | 0.041 | 0.041 | 0.203 | 0.905 | 0 | Low |
| Dyck et al. 2000 | 21 | 21 | Symptoms of psychosis | 0.145 | 0.005 | 0.004 | 0.066 | 0.032 | 1 | Some concerns |
| Gestel-Timmermans et al. 2012 | 134 | 116 | General mental health | 0.184 | 0.014 | 0.014 | 0.120 | 0.127 | 0 | High |
| Gestel-Timmermans et al. 2012 | 121 | 100 | General mental health | 0.076 | 0.016 | 0.016 | 0.125 | 0.545 | 0 | High |
| Gatz et al. 2007 | 136 | 177 | General mental health | -0.052 | 0.011 | 0.011 | 0.103 | 0.616 | 1 | Serious |
| Gatz et al. 2007 | 136 | 177 | General mental health | -0.216 | 0.016 | 0.016 | 0.126 | 0.087 | 1 | Serious |
| Gonzalez & Prihoda 2007 | 8 | 9 | General mental health | 0.596 | 0.205 | 0.193 | 0.439 | 0.188 | 1 | Serious |
| Gordon et al. 2018 | 21 | 15 | General mental health | 0.066 | 0.141 | 0.141 | 0.375 | 0.861 | 1 | Some concerns |
| Gutman et al. 2019 | 10 | 10 | General mental health | 1.140 | 0.070 | 0.034 | 0.184 | 0.000 | 1 | Serious |
| Hagen et al. 2005 | 15 | 17 | General mental health | 0.407 | 0.169 | 0.166 | 0.408 | 0.323 | 1 | High |
| Hagen et al. 2005 | 15 | 17 | Anxiety | 0.521 | 0.171 | 0.166 | 0.408 | 0.208 | 1 | High |
| Hagen et al. 2005 | 15 | 15 | Depression | 0.355 | 0.169 | 0.173 | 0.416 | 0.387 | 1 | High |
| Haslam et al. 2019 | 66 | 54 | Depression | -0.033 | 0.000 | 0.000 | 0.021 | 0.109 | 0 | High |
| Haslam et al. 2019 | 66 | 54 | General mental health | -0.478 | 0.025 | 0.024 | 0.155 | 0.002 | 0 | High |
| Hilden et al. 2021 | 23 | 12 | General mental health | -0.337 | 0.142 | 0.140 | 0.375 | 0.371 | 0 | High |
| Hilden et al. 2021 | 23 | 12 | Anxiety | -0.202 | 0.141 | 0.140 | 0.375 | 0.591 | 0 | High |
| Himle et al. 2014 | 29 | 29 | General mental health | 0.597 | 0.086 | 0.083 | 0.288 | 0.042 | 0 | Some concerns |
| Himle et al. 2014 | 29 | 29 | General mental health | 0.385 | 0.084 | 0.083 | 0.288 | 0.184 | 0 | Some concerns |
| Himle et al. 2014 | 29 | 29 | General mental health | 0.379 | 0.084 | 0.083 | 0.288 | 0.191 | 0 | Some concerns |
| Himle et al. 2014 | 29 | 29 | Anxiety | 0.564 | 0.086 | 0.083 | 0.288 | 0.054 | 0 | Some concerns |
| Himle et al. 2014 | 29 | 29 | General mental health | 0.628 | 0.086 | 0.083 | 0.288 | 0.033 | 0 | Some concerns |
| Himle et al. 2014 | 29 | 29 | General mental health | 0.729 | 0.088 | 0.083 | 0.288 | 0.014 | 0 | Some concerns |
| Himle et al. 2014 | 29 | 29 | General mental health | 0.827 | 0.089 | 0.083 | 0.288 | 0.006 | 0 | Some concerns |
| Himle et al. 2014 | 29 | 29 | Anxiety | 0.297 | 0.084 | 0.083 | 0.288 | 0.304 | 0 | Some concerns |
| Jacob et al. 2010 | 19 | 24 | Depression | 0.482 | 0.114 | 0.116 | 0.341 | 0.152 | 1 | Serious |
| Jacob et al. 2010 | 19 | 24 | Depression | 0.379 | 0.113 | 0.116 | 0.341 | 0.260 | 1 | Serious |
| James et al. 2004 | 29 | 29 | General mental health | 0.783 | 0.088 | 0.083 | 0.288 | 0.008 | 1 | Some concerns |
| James et al. 2004 | 31 | 29 | General mental health | 0.465 | 0.081 | 0.079 | 0.282 | 0.103 | 1 | Some concerns |
| Kanie et al. 2019 | 32 | 29 | General mental health | 0.037 | 0.078 | 0.078 | 0.279 | 0.893 | 0 | Low |
| Kanie et al. 2019 | 32 | 29 | Symptoms of psychosis | -0.041 | 0.078 | 0.078 | 0.279 | 0.882 | 0 | Low |
| Lim et al. 2020 | 18 | 21 | Symptoms of psychosis | 0.667 | 0.143 | 0.137 | 0.371 | 0.078 | 1 | Serious |
| Lim et al. 2020 | 18 | 21 | Symptoms of psychosis | -0.084 | 0.137 | 0.137 | 0.371 | 0.821 | 1 | Serious |
| Lim et al. 2020 | 18 | 21 | Symptoms of psychosis | 0.695 | 0.144 | 0.137 | 0.371 | 0.067 | 1 | Serious |
| Lim et al. 2020 | 18 | 21 | Symptoms of psychosis | -0.644 | 0.143 | 0.137 | 0.371 | 0.089 | 1 | Serious |
| Lim et al. 2020 | 18 | 21 | Symptoms of psychosis | 0.574 | 0.142 | 0.137 | 0.371 | 0.128 | 1 | Serious |
| Lloyd-Evans et al. 2020 | 25 | 10 | Anxiety | 0.501 | 0.162 | 0.158 | 0.398 | 0.213 | 0 | Low |
| Lloyd-Evans et al. 2020 | 25 | 10 | Depression | 0.456 | 0.157 | 0.158 | 0.398 | 0.250 | 0 | Low |
| Madigan et al. 2013 | 42 | 22 | General mental health | 0.000 | 0.081 | 0.081 | 0.285 | 1.000 | 1 | Some concerns |
| Madigan et al. 2013 | 40 | 20 | Symptoms of psychosis | -0.122 | 0.088 | 0.088 | 0.296 | 0.680 | 1 | Some concerns |
| Madigan et al. 2013 | 40 | 20 | Depression | 0.065 | 0.088 | 0.088 | 0.296 | 0.827 | 1 | Some concerns |
| Madigan et al. 2013 | 32 | 17 | General mental health | -0.024 | 0.106 | 0.106 | 0.326 | 0.942 | 1 | Some concerns |
| Madigan et al. 2013 | 32 | 19 | Symptoms of psychosis | 0.156 | 0.101 | 0.100 | 0.317 | 0.623 | 1 | Some concerns |
| Madigan et al. 2013 | 33 | 11 | Depression | 0.022 | 0.133 | 0.133 | 0.365 | 0.952 | 1 | Some concerns |
| McCay et al. 2006 | 26 | 14 | Symptoms of psychosis | 0.171 | 0.115 | 0.114 | 0.338 | 0.613 | 1 | Serious |
| McCay et al. 2006 | 26 | 14 | Symptoms of psychosis | 0.633 | 0.169 | 0.164 | 0.405 | 0.124 | 1 | Serious |
| Michalak et al. 2015 | 36 | 35 | Depression | 0.253 | 0.068 | 0.067 | 0.260 | 0.332 | 0 | Some concerns |
| Michalak et al. 2015 | 36 | 35 | Depression | 0.577 | 0.066 | 0.067 | 0.260 | 0.025 | 0 | Some concerns |
| Michalak et al. 2015 | 35 | 35 | Depression | 0.830 | 0.074 | 0.069 | 0.262 | 0.002 | 0 | Some concerns |
| Michalak et al. 2015 | 35 | 35 | Depression | 0.526 | 0.067 | 0.069 | 0.262 | 0.042 | 0 | Some concerns |
| Morley et al. 2014 | 122 | 63 | General mental health | -0.475 | 0.028 | 0.027 | 0.166 | 0.005 | 1 | Some concerns |
| Morley et al. 2014 | 122 | 63 | Depression | 0.021 | 0.027 | 0.027 | 0.166 | 0.898 | 1 | Some concerns |
| Morley et al. 2014 | 122 | 63 | Anxiety | -0.205 | 0.028 | 0.027 | 0.166 | 0.216 | 1 | Some concerns |
| Morton et al. 2012 | 21 | 20 | General mental health | 0.758 | 0.103 | 0.096 | 0.309 | 0.018 | 1 | Some concerns |
| Morton et al. 2012 | 21 | 20 | General mental health | 0.554 | 0.052 | 0.048 | 0.219 | 0.015 | 1 | Some concerns |
| Morton et al. 2012 | 21 | 20 | General mental health | 0.280 | 0.049 | 0.048 | 0.219 | 0.205 | 1 | Some concerns |
| Morton et al. 2012 | 21 | 20 | General mental health | 0.481 | 0.051 | 0.048 | 0.219 | 0.033 | 1 | Some concerns |
| Patterson et al. 2003 | 16 | 16 | Symptoms of psychosis | 0.451 | 0.166 | 0.162 | 0.403 | 0.269 | 1 | Some concerns |
| Patterson et al. 2003 | 16 | 16 | Symptoms of psychosis | 0.962 | 0.178 | 0.162 | 0.403 | 0.023 | 1 | Some concerns |
| Patterson et al. 2003 | 16 | 16 | Symptoms of psychosis | 0.449 | 0.166 | 0.162 | 0.403 | 0.270 | 1 | Some concerns |
| Patterson et al. 2003 | 16 | 16 | Depression | 0.625 | 0.169 | 0.162 | 0.403 | 0.128 | 1 | Some concerns |
| Patterson et al. 2003 | 16 | 16 | Symptoms of psychosis | 0.558 | 0.168 | 0.162 | 0.403 | 0.173 | 1 | Some concerns |
| Patterson et al. 2003 | 16 | 16 | Symptoms of psychosis | 0.874 | 0.176 | 0.162 | 0.403 | 0.037 | 1 | Some concerns |
| Patterson et al. 2003 | 16 | 16 | Symptoms of psychosis | 0.563 | 0.168 | 0.162 | 0.403 | 0.170 | 1 | Some concerns |
| Patterson et al. 2003 | 16 | 16 | Depression | 0.739 | 0.172 | 0.162 | 0.403 | 0.075 | 1 | Some concerns |
| Popolo et al. 2019 | 8 | 10 | General mental health | 0.421 | 0.329 | 0.324 | 0.569 | 0.464 | 1 | Some concerns |
| Popolo et al. 2019 | 8 | 10 | General mental health | 0.876 | 0.269 | 0.245 | 0.495 | 0.091 | 1 | Some concerns |
| Rabenstein et al. 2016 | 153 | 148 | General mental health | -0.367 | 0.018 | 0.018 | 0.135 | 0.007 | 1 | Moderate |
| Rabenstein et al. 2016 | 153 | 148 | Depression | -0.421 | 0.017 | 0.017 | 0.132 | 0.001 | 1 | Moderate |
| Rüsch et al. 2019 | 18 | 17 | Depression | 0.648 | 0.092 | 0.086 | 0.293 | 0.033 | 0 | Some concerns |
| Rüsch et al. 2019 | 20 | 13 | Depression | 0.366 | 0.183 | 0.181 | 0.425 | 0.392 | 0 | Some concerns |
| Sacks et al. 2011 | 38 | 38 | Depression | -0.048 | 0.066 | 0.068 | 0.262 | 0.852 | 1 | Some concerns |
| Sacks et al. 2011 | 38 | 38 | General mental health | -0.064 | 0.068 | 0.068 | 0.262 | 0.806 | 1 | Some concerns |
| Sajatovic et al. 2009 | 63 | 65 | Depression | 0.234 | 0.039 | 0.039 | 0.198 | 0.239 | 1 | Some concerns |
| Sajatovic et al. 2009 | 63 | 65 | General mental health | 0.302 | 0.040 | 0.039 | 0.198 | 0.130 | 1 | Some concerns |
| Sajatovic et al. 2009 | 51 | 55 | Depression | 0.212 | 0.048 | 0.048 | 0.218 | 0.334 | 1 | Some concerns |
| Sajatovic et al. 2009 | 51 | 55 | General mental health | 0.104 | 0.048 | 0.048 | 0.218 | 0.635 | 1 | Some concerns |
| Sajatovic et al. 2009 | 41 | 39 | Depression | 0.108 | 0.062 | 0.062 | 0.249 | 0.665 | 1 | Some concerns |
| Sajatovic et al. 2009 | 41 | 39 | General mental health | 0.189 | 0.062 | 0.062 | 0.249 | 0.448 | 1 | Some concerns |
| Saloheimo et al. 2016 | 27 | 34 | Depression | 0.482 | 0.075 | 0.073 | 0.269 | 0.078 | 0 | Some concerns |
| Schrank et al. 2016 | 43 | 41 | General mental health | 0.151 | 0.062 | 0.061 | 0.248 | 0.542 | 0 | Low |
| Schäfer et al. 2019 | 115 | 117 | Depression | 0.081 | 0.022 | 0.022 | 0.150 | 0.584 | 0 | Some concerns |
| Schäfer et al. 2019 | 111 | 117 | Depression | 0.162 | 0.022 | 0.023 | 0.152 | 0.280 | 0 | Some concerns |
| Schäfer et al. 2019 | 115 | 117 | Depression | 0.210 | 0.022 | 0.022 | 0.150 | 0.155 | 0 | Some concerns |
| Schäfer et al. 2019 | 111 | 117 | Depression | 0.186 | 0.022 | 0.023 | 0.152 | 0.214 | 0 | Some concerns |
| Schäfer et al. 2019 | 115 | 117 | Depression | 0.032 | 0.022 | 0.022 | 0.150 | 0.827 | 0 | Some concerns |
| Schäfer et al. 2019 | 111 | 117 | Depression | 0.283 | 0.022 | 0.023 | 0.152 | 0.059 | 0 | Some concerns |
| Schäfer et al. 2019 | 115 | 117 | General mental health | 0.137 | 0.023 | 0.022 | 0.150 | 0.360 | 0 | Some concerns |
| Schäfer et al. 2019 | 111 | 117 | General mental health | 0.103 | 0.023 | 0.023 | 0.152 | 0.497 | 0 | Some concerns |
| Schäfer et al. 2019 | 115 | 117 | General mental health | 0.296 | 0.023 | 0.022 | 0.150 | 0.049 | 0 | Some concerns |
| Schäfer et al. 2019 | 111 | 117 | General mental health | 0.182 | 0.023 | 0.023 | 0.152 | 0.230 | 0 | Some concerns |
| Schäfer et al. 2019 | 115 | 117 | General mental health | 0.080 | 0.022 | 0.022 | 0.150 | 0.595 | 0 | Some concerns |
| Schäfer et al. 2019 | 111 | 117 | General mental health | 0.102 | 0.023 | 0.023 | 0.152 | 0.500 | 0 | Some concerns |
| Schäfer et al. 2019 | 115 | 117 | General mental health | -0.050 | 0.022 | 0.022 | 0.150 | 0.739 | 0 | Some concerns |
| Schäfer et al. 2019 | 111 | 117 | General mental health | -0.089 | 0.023 | 0.023 | 0.152 | 0.558 | 0 | Some concerns |
| Schäfer et al. 2019 | 115 | 117 | General mental health | 0.190 | 0.023 | 0.022 | 0.150 | 0.205 | 0 | Some concerns |
| Schäfer et al. 2019 | 111 | 117 | General mental health | -0.110 | 0.023 | 0.023 | 0.152 | 0.469 | 0 | Some concerns |
| Schäfer et al. 2019 | 115 | 117 | General mental health | 0.035 | 0.022 | 0.022 | 0.150 | 0.816 | 0 | Some concerns |
| Schäfer et al. 2019 | 111 | 117 | General mental health | -0.026 | 0.023 | 0.023 | 0.152 | 0.866 | 0 | Some concerns |
| Somers et al. 2017 | 90 | 100 | General mental health | -0.142 | 0.034 | 0.033 | 0.183 | 0.437 | 0 | Low |
| Tjaden et al. 2021 | 70 | 67 | General mental health | -0.046 | 0.038 | 0.038 | 0.194 | 0.812 | 0 | Low |
| Tjaden et al. 2021 | 63 | 58 | General mental health | -0.061 | 0.043 | 0.042 | 0.206 | 0.767 | 0 | Low |
| Valiente et al. 2022 | 52 | 61 | General mental health | 0.046 | 0.047 | 0.047 | 0.218 | 0.832 | 0 | Low |
| Valiente et al. 2022 | 52 | 61 | General mental health | 0.021 | 0.047 | 0.047 | 0.218 | 0.923 | 0 | Low |
| Valiente et al. 2022 | 52 | 61 | General mental health | 0.000 | 0.047 | 0.047 | 0.218 | 1.000 | 0 | Low |
| Valiente et al. 2022 | 52 | 61 | General mental health | 0.153 | 0.048 | 0.047 | 0.218 | 0.482 | 0 | Low |
| Valiente et al. 2022 | 52 | 61 | General mental health | -0.131 | 0.048 | 0.047 | 0.218 | 0.547 | 0 | Low |
| Valiente et al. 2022 | 52 | 61 | General mental health | 0.025 | 0.047 | 0.047 | 0.218 | 0.909 | 0 | Low |
| Valiente et al. 2022 | 52 | 61 | General mental health | -0.043 | 0.047 | 0.047 | 0.218 | 0.844 | 0 | Low |
| Valiente et al. 2022 | 52 | 61 | General mental health | 0.033 | 0.047 | 0.047 | 0.218 | 0.881 | 0 | Low |
| Valiente et al. 2022 | 52 | 61 | General mental health | 0.157 | 0.048 | 0.047 | 0.218 | 0.470 | 0 | Low |
| Volpe et al. 2015 | 21 | 20 | General mental health | 0.213 | 0.127 | 0.126 | 0.355 | 0.549 | 1 | Some concerns |
| Volpe et al. 2015 | 21 | 20 | Depression | 0.125 | 0.124 | 0.126 | 0.355 | 0.723 | 1 | Some concerns |
| Wojtalik et al. 2022 | 26 | 23 | General mental health | 0.084 | 0.022 | 0.021 | 0.147 | 0.566 | 0 | Low |
| Wuthrich & Rapee 2013 | 27 | 35 | Anxiety | 1.654 | 0.113 | 0.089 | 0.298 | 0.000 | 0 | Some concerns |
| Smith et al. 2021 | 27 | 35 | Anxiety | 1.346 | 0.105 | 0.089 | 0.298 | 0.000 | 0 | Some concerns |
| Smith et al. 2021 | 27 | 35 | Depression | 1.801 | 0.119 | 0.089 | 0.298 | 0.000 | 0 | Some concerns |
| Wuthrich & Rapee 2013 | 27 | 35 | Depression | 0.811 | 0.095 | 0.089 | 0.298 | 0.008 | 0 | Some concerns |
| Wuthrich & Rapee 2013 | 27 | 35 | Anxiety | 0.462 | 0.091 | 0.089 | 0.298 | 0.125 | 0 | Some concerns |
Risk of bias
In this section, we present the main risk og bias (RoB) visualizations.
Note that in plots where the number of studies appears on the x-axis, some bars differ in length. This occurs because a single study contribute multiple effect size estimates that received different RoB assessments.
RoB2
Show the code
```{r rob2-dat}
rho <- 0.8
V_mat <- metafor::vcalc(vi = vgt_pop, cluster = study, obs = esid, data = reintegation_dat, rho = rho)
rma_res <-
metafor::rma.mv(
gt_pop,
V = V_mat,
random = ~ 1 | study / esid,
data = reintegation_dat
)
tau2 <- rma_res$sigma2[1]
omega2<- rma_res$sigma2[2]
reint_rob2_dat <-
reintegation_dat |>
mutate(
kj = n(),
sigma2j = mean(vgt_pop),
weight = 1 / (kj*tau2 + omega2 + (kj-1)*rho*sigma2j + sigma2j),
.by = study
) |>
filter(rob_tool == "RoB2") |>
select(
prereg = prereg_chr, study, D1:D5, Overall, weight
)
rob_sum <-
reint_rob2_dat |>
pivot_longer(D1:Overall, names_to = "Category", values_to = "Rating") |>
mutate(
Category = factor(
Category, levels = c(paste0("D", 1:5), "Overall"),
labels = c(
"Bias arising from the randomization process",
"Bias due to deviations from intended interventions",
"Bias due to missing outcome data",
"Bias in measurement of the outcome",
"Bias in selection of the reported result",
"Overall risk of bias"
)
),
Rating = case_when(str_detect(Rating, "Some") ~ "Some concerns", .default = Rating),
Rating = factor(Rating, levels = c("Low", "Some concerns", "High"))
) |>
group_by(prereg, Category, Rating, study) |>
summarize(
effects = n(),
weight = sum(weight),
.groups = "drop_last"
) |>
summarise(
studies = length(unique(study)),
effects = sum(effects),
weight = sum(weight),
.groups = "drop_last"
) |>
mutate(
effects_pct = 100 * effects / sum(effects),
studies_pct = 100 * studies / sum(studies),
effects_pct_w = weight/sum(weight) * 100,
studies_w = studies * weight,
studies_pct_w = studies_w / sum(studies_w) * 100
) |>
ungroup()
# Mental health
V_mat_mental <- metafor::vcalc(vi = vgt_pop, cluster = study, obs = esid, data = mental_health_dat, rho = rho)
rma_res_mental <-
metafor::rma.mv(
gt_pop,
V = V_mat_mental,
random = ~ 1 | study / esid,
data = mental_health_dat
)
tau2_mental <- rma_res_mental$sigma2[1]
omega2_mental <- rma_res_mental$sigma2[2]
mental_rob2_dat <-
mental_health_dat |>
mutate(
kj = n(),
sigma2j = mean(vgt_pop),
weight = 1 / (kj*tau2_mental + omega2_mental + (kj-1)*rho*sigma2j + sigma2j),
.by = study
) |>
filter(rob_tool == "RoB2") |>
select(
prereg = prereg_chr, study, D1:D5, Overall, weight
)
rob_sum_mental <-
mental_rob2_dat |>
pivot_longer(D1:Overall, names_to = "Category", values_to = "Rating") |>
mutate(
Category = factor(
Category, levels = c(paste0("D", 1:5), "Overall"),
labels = c(
"Bias arising from the randomization process",
"Bias due to deviations from intended interventions",
"Bias due to missing outcome data",
"Bias in measurement of the outcome",
"Bias in selection of the reported result",
"Overall risk of bias"
)
),
Rating = case_when(str_detect(Rating, "Some") ~ "Some concerns", .default = Rating),
Rating = factor(Rating, levels = c("Low", "Some concerns", "High"))
) |>
group_by(prereg, Category, Rating, study) |>
summarize(
effects = n(),
weight = sum(weight),
.groups = "drop_last"
) |>
summarise(
studies = length(unique(study)),
effects = sum(effects),
weight = sum(weight),
.groups = "drop_last"
) |>
mutate(
effects_pct = 100 * effects / sum(effects),
studies_pct = 100 * studies / sum(studies),
effects_pct_w = weight/sum(weight) * 100,
studies_w = studies * weight,
studies_pct_w = studies_w / sum(studies_w) * 100
) |>
ungroup()
```Overall (Not preregistered vs. preregistered)
Show the code
```{r rob2-fig-number-reint}
#| label: fig-rob2-reint-raw-number
#| fig-cap: "RoB2 plot for reintegration studies and outcomes across type of registration (raw numbers)"
#| fig.width: 9
#| fig.height: 6
#| fig.retina: 2
#| message: false
rob_pct_studies <-
rob_sum |>
mutate(
Rating = fct_rev(Rating),
level = "Study-level"
) |>
ggplot(aes(x = studies, y = Category, fill = Rating)) +
geom_col(alpha = 0.9) +
facet_grid(level ~ prereg, scales = "free_x") +
scale_fill_manual(
values = c("Low" = "mediumaquamarine", "Some concerns" = "lightgoldenrodyellow", "High" = "lightcoral")
) +
scale_y_discrete(
limits = rev,
labels = c(
expression(bold("Overall risk of bias")),
"Bias in selection of the reported result",
"Bias in measurement of the outcome",
"Bias due to missing outcome data",
"Bias due to deviations from intended interventions",
"Bias arising from the randomization process"
)
) +
labs(
y = "",
x = "Number of studies",
fill = "Risk of Bias"
) +
guides(fill = guide_legend(reverse = TRUE)) +
theme_bw() +
theme(
legend.position = "none"
) +
facetted_pos_scales(
x = list(
prereg == "Not preregistered" ~ scale_x_continuous(breaks = seq(0, 16, 2)
)
)
)
rob_pct_effects <-
rob_sum |>
mutate(
Rating = fct_rev(Rating),
level = "Outcome-level"
) |>
ggplot(aes(x = effects, y = Category, fill = Rating)) +
geom_col(alpha = 0.9) +
facet_grid(level ~ prereg, scales = "free_x") +
scale_fill_manual(
values = c("Low" = "mediumaquamarine", "Some concerns" = "lightgoldenrodyellow", "High" = "lightcoral")
) +
scale_y_discrete(
limits = rev,
labels = c(
expression(bold("Overall risk of bias")),
"Bias in selection of the reported result",
"Bias in measurement of the outcome",
"Bias due to missing outcome data",
"Bias due to deviations from intended interventions",
"Bias arising from the randomization process"
)
) +
labs(
x = "Number of effects",
y = "",
fill = "Risk of Bias"
) +
guides(fill = guide_legend(reverse = TRUE)) +
theme_bw() +
theme(
legend.position = "bottom",
strip.text.x = element_blank()
) +
facetted_pos_scales(
x = list(
prereg == "Preregistered" ~ scale_x_continuous(breaks = seq(0, 150, 25)
)
)
)
rob_pct_studies / rob_pct_effects
```Show the code
```{r rob2-weighted}
#| label: fig-rob2-reint-weigthed
#| fig-cap: "RoB2 plot for reintegration studies and outcomes across type of registration (weighted percentage)"
#| fig.width: 9
#| fig.height: 6
#| fig.retina: 2
#| message: false
rob_pct_studies_weight <-
rob_sum |>
mutate(
Rating = fct_rev(Rating),
level = "Studies"
) |>
ggplot(aes(x = studies_pct_w, y = Category, fill = Rating)) +
geom_col(alpha = 0.9) +
facet_grid(level ~ prereg, scales = "free_x") +
scale_fill_manual(
values = c("Low" = "mediumaquamarine", "Some concerns" = "lightgoldenrodyellow", "High" = "lightcoral")
) +
scale_y_discrete(
limits = rev,
labels = c(
expression(bold("Overall risk of bias")),
"Bias in selection of the reported result",
"Bias in measurement of the outcome",
"Bias due to missing outcome data",
"Bias due to deviations from intended interventions",
"Bias arising from the randomization process"
)
) +
labs(
y = "",
fill = "Risk of Bias"
) +
guides(fill = guide_legend(reverse = TRUE)) +
theme_bw() +
theme(
legend.position = "none",
axis.title.x=element_blank()
)
rob_pct_effects_weight <-
rob_sum |>
mutate(
Rating = fct_rev(Rating),
level = "Effects"
) |>
ggplot(aes(x = effects_pct_w, y = Category, fill = Rating)) +
geom_col(alpha = 0.9) +
facet_grid(level ~ prereg, scales = "free_x") +
scale_fill_manual(
values = c("Low" = "mediumaquamarine", "Some concerns" = "lightgoldenrodyellow", "High" = "lightcoral")
) +
scale_y_discrete(
limits = rev,
labels = c(
expression(bold("Overall risk of bias")),
"Bias in selection of the reported result",
"Bias in measurement of the outcome",
"Bias due to missing outcome data",
"Bias due to deviations from intended interventions",
"Bias arising from the randomization process"
)
) +
labs(
x = "Weighted percentage",
y = "",
fill = "Risk of Bias"
) +
guides(fill = guide_legend(reverse = TRUE)) +
theme_bw() +
theme(
legend.position = "bottom",
strip.text.x = element_blank()
)
rob_pct_studies_weight / rob_pct_effects_weight
```Show the code
```{r rob2-unweighted}
#| label: fig-rob2-reint-unweigthed
#| fig-cap: "RoB2 plot for reintegration studies and outcomes across type of registration (unweighted percentage)"
#| fig.width: 9
#| fig.height: 6
#| fig.retina: 2
#| message: false
rob_pct_studies_unweight <-
rob_sum |>
mutate(
Rating = fct_rev(Rating),
level = "Studies"
) |>
ggplot(aes(x = studies_pct, y = Category, fill = Rating)) +
geom_col(alpha = 0.9) +
facet_grid(level ~ prereg, scales = "free_x") +
scale_fill_manual(
values = c("Low" = "mediumaquamarine", "Some concerns" = "lightgoldenrodyellow", "High" = "lightcoral")
) +
scale_y_discrete(
limits = rev,
labels = c(
expression(bold("Overall risk of bias")),
"Bias in selection of the reported result",
"Bias in measurement of the outcome",
"Bias due to missing outcome data",
"Bias due to deviations from intended interventions",
"Bias arising from the randomization process"
)
) +
labs(
y = "",
fill = "Risk of Bias"
) +
guides(fill = guide_legend(reverse = TRUE)) +
theme_bw() +
theme(
legend.position = "none",
axis.title.x=element_blank()
)
rob_pct_effects_unweight <-
rob_sum |>
mutate(
Rating = fct_rev(Rating),
level = "Effects"
) |>
ggplot(aes(x = effects_pct, y = Category, fill = Rating)) +
geom_col(alpha = 0.9) +
facet_grid(level ~ prereg, scales = "free_x") +
scale_fill_manual(
values = c("Low" = "mediumaquamarine", "Some concerns" = "lightgoldenrodyellow", "High" = "lightcoral")
) +
scale_y_discrete(
limits = rev,
labels = c(
expression(bold("Overall risk of bias")),
"Bias in selection of the reported result",
"Bias in measurement of the outcome",
"Bias due to missing outcome data",
"Bias due to deviations from intended interventions",
"Bias arising from the randomization process"
)
) +
labs(
x = "Percentage",
y = "",
fill = "Risk of Bias"
) +
guides(fill = guide_legend(reverse = TRUE)) +
theme_bw() +
theme(
legend.position = "bottom",
strip.text.x = element_blank()
)
rob_pct_studies_unweight / rob_pct_effects_unweight
```Show the code
```{r rob2-fig-number-mental}
#| label: fig-rob2-mental-raw-number
#| fig-cap: "RoB2 plot for mental health studies and outcomes across type of registration (raw numbers)"
#| fig.width: 9
#| fig.height: 6
#| fig.retina: 2
#| message: false
rob_pct_studies_mental <-
rob_sum_mental |>
mutate(
Rating = fct_rev(Rating),
level = "Study-level"
) |>
ggplot(aes(x = studies, y = Category, fill = Rating)) +
geom_col(alpha = 0.9) +
facet_grid(level ~ prereg, scales = "free_x") +
scale_fill_manual(
values = c("Low" = "mediumaquamarine", "Some concerns" = "lightgoldenrodyellow", "High" = "lightcoral")
) +
scale_y_discrete(
limits = rev,
labels = c(
expression(bold("Overall risk of bias")),
"Bias in selection of the reported result",
"Bias in measurement of the outcome",
"Bias due to missing outcome data",
"Bias due to deviations from intended interventions",
"Bias arising from the randomization process"
)
) +
labs(
y = "",
x = "Number of studies",
fill = "Risk of Bias"
) +
guides(fill = guide_legend(reverse = TRUE)) +
theme_bw() +
theme(
legend.position = "none"
) +
facetted_pos_scales(
x = list(
prereg == "Not preregistered" ~ scale_x_continuous(breaks = seq(0, 16, 2)
)
)
)
rob_pct_effects_mental <-
rob_sum_mental |>
mutate(
Rating = fct_rev(Rating),
level = "Outcome-level"
) |>
ggplot(aes(x = effects, y = Category, fill = Rating)) +
geom_col(alpha = 0.9) +
facet_grid(level ~ prereg, scales = "free_x") +
scale_fill_manual(
values = c("Low" = "mediumaquamarine", "Some concerns" = "lightgoldenrodyellow", "High" = "lightcoral")
) +
scale_y_discrete(
limits = rev,
labels = c(
expression(bold("Overall risk of bias")),
"Bias in selection of the reported result",
"Bias in measurement of the outcome",
"Bias due to missing outcome data",
"Bias due to deviations from intended interventions",
"Bias arising from the randomization process"
)
) +
labs(
x = "Number of effects",
y = "",
fill = "Risk of Bias"
) +
guides(fill = guide_legend(reverse = TRUE)) +
theme_bw() +
theme(
legend.position = "bottom",
strip.text.x = element_blank()
)
rob_pct_studies_mental / rob_pct_effects_mental
```Show the code
```{r rob2-weighted-mental}
#| label: fig-rob2-mental-weigthed
#| fig-cap: "RoB2 plot for mental health studies and outcomes across type of registration (weighted percentage)"
#| fig.width: 9
#| fig.height: 6
#| fig.retina: 2
#| message: false
rob_pct_studies_weight_mental <-
rob_sum_mental |>
mutate(
Rating = fct_rev(Rating),
level = "Studies"
) |>
ggplot(aes(x = studies_pct_w, y = Category, fill = Rating)) +
geom_col(alpha = 0.9) +
facet_grid(level ~ prereg, scales = "free_x") +
scale_fill_manual(
values = c("Low" = "mediumaquamarine", "Some concerns" = "lightgoldenrodyellow", "High" = "lightcoral")
) +
scale_y_discrete(
limits = rev,
labels = c(
expression(bold("Overall risk of bias")),
"Bias in selection of the reported result",
"Bias in measurement of the outcome",
"Bias due to missing outcome data",
"Bias due to deviations from intended interventions",
"Bias arising from the randomization process"
)
) +
labs(
y = "",
fill = "Risk of Bias"
) +
guides(fill = guide_legend(reverse = TRUE)) +
theme_bw() +
theme(
legend.position = "none",
axis.title.x=element_blank()
)
rob_pct_effects_weight_mental <-
rob_sum_mental |>
mutate(
Rating = fct_rev(Rating),
level = "Effects"
) |>
ggplot(aes(x = effects_pct_w, y = Category, fill = Rating)) +
geom_col(alpha = 0.9) +
facet_grid(level ~ prereg, scales = "free_x") +
scale_fill_manual(
values = c("Low" = "mediumaquamarine", "Some concerns" = "lightgoldenrodyellow", "High" = "lightcoral")
) +
scale_y_discrete(
limits = rev,
labels = c(
expression(bold("Overall risk of bias")),
"Bias in selection of the reported result",
"Bias in measurement of the outcome",
"Bias due to missing outcome data",
"Bias due to deviations from intended interventions",
"Bias arising from the randomization process"
)
) +
labs(
x = "Weighted percentage",
y = "",
fill = "Risk of Bias"
) +
guides(fill = guide_legend(reverse = TRUE)) +
theme_bw() +
theme(
legend.position = "bottom",
strip.text.x = element_blank()
)
rob_pct_studies_weight_mental / rob_pct_effects_weight_mental
```Show the code
```{r rob2-unweighted-mental}
#| label: fig-rob2-mental-unweigthed
#| fig-cap: "RoB2 plot for mental health studies and outcomes across type of registration (unweighted percentage)"
#| fig.width: 9
#| fig.height: 6
#| fig.retina: 2
#| message: false
rob_pct_studies_unweight_mental <-
rob_sum_mental |>
mutate(
Rating = fct_rev(Rating),
level = "Studies"
) |>
ggplot(aes(x = studies_pct, y = Category, fill = Rating)) +
geom_col(alpha = 0.9) +
facet_grid(level ~ prereg, scales = "free_x") +
scale_fill_manual(
values = c("Low" = "mediumaquamarine", "Some concerns" = "lightgoldenrodyellow", "High" = "lightcoral")
) +
scale_y_discrete(
limits = rev,
labels = c(
expression(bold("Overall risk of bias")),
"Bias in selection of the reported result",
"Bias in measurement of the outcome",
"Bias due to missing outcome data",
"Bias due to deviations from intended interventions",
"Bias arising from the randomization process"
)
) +
labs(
y = "",
fill = "Risk of Bias"
) +
guides(fill = guide_legend(reverse = TRUE)) +
theme_bw() +
theme(
legend.position = "none",
axis.title.x=element_blank()
)
rob_pct_effects_unweight <-
rob_sum_mental |>
mutate(
Rating = fct_rev(Rating),
level = "Effects"
) |>
ggplot(aes(x = effects_pct, y = Category, fill = Rating)) +
geom_col(alpha = 0.9) +
facet_grid(level ~ prereg, scales = "free_x") +
scale_fill_manual(
values = c("Low" = "mediumaquamarine", "Some concerns" = "lightgoldenrodyellow", "High" = "lightcoral")
) +
scale_y_discrete(
limits = rev,
labels = c(
expression(bold("Overall risk of bias")),
"Bias in selection of the reported result",
"Bias in measurement of the outcome",
"Bias due to missing outcome data",
"Bias due to deviations from intended interventions",
"Bias arising from the randomization process"
)
) +
labs(
x = "Percentage",
y = "",
fill = "Risk of Bias"
) +
guides(fill = guide_legend(reverse = TRUE)) +
theme_bw() +
theme(
legend.position = "bottom",
strip.text.x = element_blank()
)
rob_pct_studies_unweight / rob_pct_effects_unweight
```Subgrouped risk of bias plots
Show the code
```{r rob2-dat-subgroup}
reint_rob2_subgrp_dat <-
reintegation_dat |>
mutate(
kj = n(),
sigma2j = mean(vgt_pop),
weight = 1 / (kj*tau2 + omega2 + (kj-1)*rho*sigma2j + sigma2j),
.by = study
) |>
filter(rob_tool == "RoB2" & str_detect(analysis_plan, "Alco|Well|Hope|Social")) |>
select(
outcome = analysis_plan, prereg = prereg_chr, study, D1:D5, Overall, weight
) |>
mutate(
outcome = case_match(
outcome,
"Alcohol and drug abuse/misuse" ~ "Alcohol/drugs",
"Hope, empowerment & self-efficacy" ~ "Hope/empower",
"Social functioning (degree of impairment)" ~ "Social function",
"Wellbeing and quality of life" ~ "Wellbeing/QoL"
)
)
rob_sum_subgrp <-
reint_rob2_subgrp_dat |>
pivot_longer(D1:Overall, names_to = "Category", values_to = "Rating") |>
mutate(
Category = factor(
Category, levels = c(paste0("D", 1:5), "Overall"),
labels = c(
"Bias arising from the randomization process",
"Bias due to deviations from intended interventions",
"Bias due to missing outcome data",
"Bias in measurement of the outcome",
"Bias in selection of the reported result",
"Overall risk of bias"
)
),
Rating = case_when(str_detect(Rating, "Some") ~ "Some concerns", .default = Rating),
Rating = factor(Rating, levels = c("Low", "Some concerns", "High"))
) |>
group_by(prereg, outcome, Category, Rating, study) |>
summarize(
effects = n(),
weight = sum(weight),
.groups = "drop_last"
) |>
summarise(
studies = length(unique(study)),
effects = sum(effects),
weight = sum(weight),
.groups = "drop_last"
) |>
mutate(
effects_pct = 100 * effects / sum(effects),
studies_pct = 100 * studies / sum(studies),
effects_pct_w = weight/sum(weight) * 100,
studies_w = studies * weight,
studies_pct_w = studies_w / sum(studies_w) * 100
) |>
ungroup()
# Mental health
mental_rob2_subgrp_dat <-
mental_health_dat |>
mutate(
kj = n(),
sigma2j = mean(vgt_pop),
weight = 1 / (kj*tau2 + omega2 + (kj-1)*rho*sigma2j + sigma2j),
.by = study
) |>
filter(rob_tool == "RoB2") |>
select(
outcome = analysis_plan, prereg = prereg_chr, study, D1:D5, Overall, weight
) |>
mutate(
outcome = factor(
outcome,
levels = c("Anxiety", "Depression", "General mental health", "Symptoms of psychosis")
)
)
rob_sum_subgrp_mental <-
mental_rob2_subgrp_dat |>
pivot_longer(D1:Overall, names_to = "Category", values_to = "Rating") |>
mutate(
Category = factor(
Category, levels = c(paste0("D", 1:5), "Overall"),
labels = c(
"Bias arising from the randomization process",
"Bias due to deviations from intended interventions",
"Bias due to missing outcome data",
"Bias in measurement of the outcome",
"Bias in selection of the reported result",
"Overall risk of bias"
)
),
Rating = case_when(str_detect(Rating, "Some") ~ "Some concerns", .default = Rating),
Rating = factor(Rating, levels = c("Low", "Some concerns", "High"))
) |>
group_by(prereg, outcome, Category, Rating, study) |>
summarize(
effects = n(),
weight = sum(weight),
.groups = "drop_last"
) |>
summarise(
studies = length(unique(study)),
effects = sum(effects),
weight = sum(weight),
.groups = "drop_last"
) |>
mutate(
effects_pct = 100 * effects / sum(effects),
studies_pct = 100 * studies / sum(studies),
effects_pct_w = weight/sum(weight) * 100,
studies_w = studies * weight,
studies_pct_w = studies_w / sum(studies_w) * 100
) |>
ungroup()
```Show the code
```{r rob2-subgroup-n-studies}
#| label: fig-rob2-reint-n-studies-subgroup
#| fig-cap: "RoB2 plot for reintegration studies and outcomes by type of registration and outcome (number of studies)"
#| fig.width: 9
#| fig.height: 10
#| fig.retina: 2
#| message: false
rob_studies_subgrp <-
rob_sum_subgrp |>
mutate(
Rating = fct_rev(Rating),
level = "Studies"
) |>
ggplot(aes(x = studies, y = Category, fill = Rating)) +
geom_col(alpha = 0.9) +
facet_nested_wrap(outcome ~ prereg, scales = "free_x", ncol = 2) +
scale_fill_manual(
values = c("Low" = "mediumaquamarine", "Some concerns" = "lightgoldenrodyellow", "High" = "lightcoral")
) +
scale_y_discrete(
limits = rev,
labels = c(
expression(bold("Overall risk of bias")),
"Bias in selection of the reported result",
"Bias in measurement of the outcome",
"Bias due to missing outcome data",
"Bias due to deviations from intended interventions",
"Bias arising from the randomization process"
)
) +
labs(
y = "",
x = "Number of studies",
fill = "Risk of Bias"
) +
guides(fill = guide_legend(reverse = TRUE)) +
theme_bw() +
theme(
legend.position = "bottom"
) +
facetted_pos_scales(
x = list(
prereg == "Not preregistered" & outcome == "Alcohol/drugs" ~ scale_x_continuous(breaks = seq(0, 2, 1)),
prereg == "Preregistered" & outcome == "Wellbeing/QoL" ~ scale_x_continuous(breaks = seq(0, 14, 2)),
prereg == "Preregistered" & outcome == "Social function" ~ scale_x_continuous(breaks = seq(0, 10, 2))
)
)
rob_studies_subgrp
```Show the code
```{r rob2-subgroup-studies-weighted}
#| label: fig-rob2-reint-weigthed-subgroup
#| fig-cap: "RoB2 plot for reintegration studies and outcomes by type of registration and outcome (weighted percentage of studies)"
#| fig.width: 9
#| fig.height: 6
#| fig.retina: 2
#| message: false
# Weigthed percent
rob_weight_pct_studies_subgrp <-
rob_sum_subgrp |>
mutate(
Rating = fct_rev(Rating),
level = "Studies"
) |>
ggplot(aes(x = studies_pct_w, y = Category, fill = Rating)) +
geom_col(alpha = 0.9) +
facet_grid2(outcome ~ prereg, scales = "free_x") +
scale_fill_manual(
values = c("Low" = "mediumaquamarine", "Some concerns" = "lightgoldenrodyellow", "High" = "lightcoral")
) +
scale_y_discrete(
limits = rev,
labels = c(
expression(bold("Overall risk of bias")),
"Bias in selection of the reported result",
"Bias in measurement of the outcome",
"Bias due to missing outcome data",
"Bias due to deviations from intended interventions",
"Bias arising from the randomization process"
)
) +
labs(
y = "",
x = "Weighted percentage of studies",
fill = "Risk of Bias"
) +
guides(fill = guide_legend(reverse = TRUE)) +
theme_bw() +
theme(
legend.position = "bottom"
)
rob_weight_pct_studies_subgrp
```Show the code
```{r rob2-subgroup-studies-unweight}
#| label: fig-rob2-reint-unweigthed-subgroup
#| fig-cap: "RoB2 plot for reintegration studies and outcomes by type of registration and outcome (unweighted percentage of studies)"
#| fig.width: 9
#| fig.height: 6
#| fig.retina: 2
#| message: false
# unweigthed percent
rob_unweight_pct_studies_subgrp <-
rob_sum_subgrp |>
mutate(
Rating = fct_rev(Rating),
level = "Studies"
) |>
ggplot(aes(x = studies_pct, y = Category, fill = Rating)) +
geom_col(alpha = 0.9) +
facet_grid2(outcome ~ prereg, scales = "free_x") +
scale_fill_manual(
values = c("Low" = "mediumaquamarine", "Some concerns" = "lightgoldenrodyellow", "High" = "lightcoral")
) +
scale_y_discrete(
limits = rev,
labels = c(
expression(bold("Overall risk of bias")),
"Bias in selection of the reported result",
"Bias in measurement of the outcome",
"Bias due to missing outcome data",
"Bias due to deviations from intended interventions",
"Bias arising from the randomization process"
)
) +
labs(
y = "",
x = "Percentage of studies",
fill = "Risk of Bias"
) +
guides(fill = guide_legend(reverse = TRUE)) +
theme_bw() +
theme(
legend.position = "bottom"
)
rob_unweight_pct_studies_subgrp
```Show the code
```{r rob2-subgroup-n-effects}
#| label: fig-rob2-reint-n-effects-subgroup
#| fig-cap: "RoB2 plot for reintegration studies and outcomes by type of registration and outcome (number of effects)"
#| fig.width: 9
#| fig.height: 10
#| fig.retina: 2
#| message: false
rob_effects_subgrp <-
rob_sum_subgrp |>
mutate(
Rating = fct_rev(Rating),
level = "Effects"
) |>
ggplot(aes(x = effects, y = Category, fill = Rating)) +
geom_col(alpha = 0.9) +
facet_nested_wrap(outcome ~ prereg, scales = "free_x", ncol = 2) +
scale_fill_manual(
values = c("Low" = "mediumaquamarine", "Some concerns" = "lightgoldenrodyellow", "High" = "lightcoral")
) +
scale_y_discrete(
limits = rev,
labels = c(
expression(bold("Overall risk of bias")),
"Bias in selection of the reported result",
"Bias in measurement of the outcome",
"Bias due to missing outcome data",
"Bias due to deviations from intended interventions",
"Bias arising from the randomization process"
)
) +
labs(
y = "",
x = "Number of effects",
fill = "Risk of Bias"
) +
guides(fill = guide_legend(reverse = TRUE)) +
theme_bw() +
theme(
legend.position = "bottom"
) +
facetted_pos_scales(
x = list(
prereg == "Not preregistered" & outcome == "Hope/empower" ~ scale_x_continuous(breaks = seq(0, 12, 2)),
prereg == "Preregistered" & outcome == "Hope/empower" ~ scale_x_continuous(breaks = seq(0, 20, 5)),
prereg == "Not preregistered" & outcome == "Social function" ~ scale_x_continuous(breaks = seq(0, 10, 2)),
prereg == "Preregistered" & outcome == "Social function" ~ scale_x_continuous(breaks = seq(0, 40, 10)),
prereg == "Not preregistered" & outcome == "Wellbeing/QoL" ~ scale_x_continuous(breaks = seq(0, 10, 2))
)
)
rob_effects_subgrp
```Show the code
```{r rob2-subgroup-effects-weighted}
#| label: fig-rob2-reint-weigthed-effects-subgroup
#| fig-cap: "RoB2 plot for reintegration studies and outcomes by type of registration and outcome (weighted percentage of effects)"
#| fig.width: 9
#| fig.height: 6
#| fig.retina: 2
#| message: false
# Weigthed percent
rob_weight_pct_effects_subgrp <-
rob_sum_subgrp |>
mutate(
Rating = fct_rev(Rating),
level = "Effects"
) |>
ggplot(aes(x = effects_pct_w, y = Category, fill = Rating)) +
geom_col(alpha = 0.9) +
facet_grid2(outcome ~ prereg, scales = "free_x") +
scale_fill_manual(
values = c("Low" = "mediumaquamarine", "Some concerns" = "lightgoldenrodyellow", "High" = "lightcoral")
) +
scale_y_discrete(
limits = rev,
labels = c(
expression(bold("Overall risk of bias")),
"Bias in selection of the reported result",
"Bias in measurement of the outcome",
"Bias due to missing outcome data",
"Bias due to deviations from intended interventions",
"Bias arising from the randomization process"
)
) +
labs(
y = "",
x = "Weighted percentage of effects",
fill = "Risk of Bias"
) +
guides(fill = guide_legend(reverse = TRUE)) +
theme_bw() +
theme(
legend.position = "bottom"
)
rob_weight_pct_effects_subgrp
```Show the code
```{r rob2-subgroup-effects-unweight}
#| label: fig-rob2-reint-unweigthed-effects-subgroup
#| fig-cap: "RoB2 plot for reintegration studies and outcomes by type of registration and outcome (unweighted percentage of effects)"
#| fig.width: 9
#| fig.height: 6
#| fig.retina: 2
#| message: false
# unweigthed percent
rob_unweight_pct_effects_subgrp <-
rob_sum_subgrp |>
mutate(
Rating = fct_rev(Rating),
level = "Studies"
) |>
ggplot(aes(x = effects_pct, y = Category, fill = Rating)) +
geom_col(alpha = 0.9) +
facet_grid2(outcome ~ prereg, scales = "free_x") +
scale_fill_manual(
values = c("Low" = "mediumaquamarine", "Some concerns" = "lightgoldenrodyellow", "High" = "lightcoral")
) +
scale_y_discrete(
limits = rev,
labels = c(
expression(bold("Overall risk of bias")),
"Bias in selection of the reported result",
"Bias in measurement of the outcome",
"Bias due to missing outcome data",
"Bias due to deviations from intended interventions",
"Bias arising from the randomization process"
)
) +
labs(
y = "",
x = "Percentage of effects",
fill = "Risk of Bias"
) +
guides(fill = guide_legend(reverse = TRUE)) +
theme_bw() +
theme(
legend.position = "bottom"
)
rob_unweight_pct_effects_subgrp
```Show the code
```{r rob2-subgroup-n-studies-mental}
#| label: fig-rob2-mental-n-studies-subgroup
#| fig-cap: "RoB2 plot for mental studies and outcomes by type of registration and outcome (number of studies)"
#| fig.width: 9
#| fig.height: 10
#| fig.retina: 2
#| message: false
rob_studies_subgrp_mental <-
rob_sum_subgrp_mental |>
mutate(
Rating = fct_rev(Rating),
level = "Studies"
) |>
ggplot(aes(x = studies, y = Category, fill = Rating)) +
geom_col(alpha = 0.9) +
facet_nested_wrap(outcome ~ prereg, scales = "free_x", ncol = 2) +
scale_fill_manual(
values = c("Low" = "mediumaquamarine", "Some concerns" = "lightgoldenrodyellow", "High" = "lightcoral")
) +
scale_y_discrete(
limits = rev,
labels = c(
expression(bold("Overall risk of bias")),
"Bias in selection of the reported result",
"Bias in measurement of the outcome",
"Bias due to missing outcome data",
"Bias due to deviations from intended interventions",
"Bias arising from the randomization process"
)
) +
labs(
y = "",
x = "Number of studies",
fill = "Risk of Bias"
) +
guides(fill = guide_legend(reverse = TRUE)) +
theme_bw() +
theme(
legend.position = "bottom"
) +
facetted_pos_scales(
x = list(
prereg == "Not preregistered" & outcome == "Anxiety" ~ scale_x_continuous(breaks = seq(0, 2, 1)),
prereg == "Preregistered" & outcome == "Depression" ~ scale_x_continuous(breaks = seq(0, 10, 2)),
prereg == "Not preregistered" & outcome == "General mental health" ~ scale_x_continuous(breaks = seq(0, 10, 2)),
prereg == "Preregistered" & outcome == "Symptoms of psychosis" ~ scale_x_continuous(breaks = seq(0, 2, 1))
)
)
rob_studies_subgrp_mental
```Show the code
```{r rob2-subgroup-studies-weighted-mental}
#| label: fig-rob2-mental-weigthed-subgroup
#| fig-cap: "RoB2 plot for mental health studies and outcomes by type of registration and outcome (weighted percentage of studies)"
#| fig.width: 9
#| fig.height: 6
#| fig.retina: 2
#| message: false
# Weigthed percent
rob_weight_pct_studies_subgrp_mental <-
rob_sum_subgrp_mental |>
mutate(
Rating = fct_rev(Rating),
level = "Studies"
) |>
ggplot(aes(x = studies_pct_w, y = Category, fill = Rating)) +
geom_col(alpha = 0.9) +
facet_grid2(outcome ~ prereg, scales = "free_x") +
scale_fill_manual(
values = c("Low" = "mediumaquamarine", "Some concerns" = "lightgoldenrodyellow", "High" = "lightcoral")
) +
scale_y_discrete(
limits = rev,
labels = c(
expression(bold("Overall risk of bias")),
"Bias in selection of the reported result",
"Bias in measurement of the outcome",
"Bias due to missing outcome data",
"Bias due to deviations from intended interventions",
"Bias arising from the randomization process"
)
) +
labs(
y = "",
x = "Weighted percentage of studies",
fill = "Risk of Bias"
) +
guides(fill = guide_legend(reverse = TRUE)) +
theme_bw() +
theme(
legend.position = "bottom"
)
rob_weight_pct_studies_subgrp_mental
```Show the code
```{r rob2-subgroup-studies-unweight-mental}
#| label: fig-rob2-mental-unweigthed-subgroup
#| fig-cap: "RoB2 plot for mental health studies and outcomes by type of registration and outcome (unweighted percentage of studies)"
#| fig.width: 9
#| fig.height: 6
#| fig.retina: 2
#| message: false
# unweigthed percent
rob_unweight_pct_studies_subgrp_mental <-
rob_sum_subgrp_mental |>
mutate(
Rating = fct_rev(Rating),
level = "Studies"
) |>
ggplot(aes(x = studies_pct, y = Category, fill = Rating)) +
geom_col(alpha = 0.9) +
facet_grid2(outcome ~ prereg, scales = "free_x") +
scale_fill_manual(
values = c("Low" = "mediumaquamarine", "Some concerns" = "lightgoldenrodyellow", "High" = "lightcoral")
) +
scale_y_discrete(
limits = rev,
labels = c(
expression(bold("Overall risk of bias")),
"Bias in selection of the reported result",
"Bias in measurement of the outcome",
"Bias due to missing outcome data",
"Bias due to deviations from intended interventions",
"Bias arising from the randomization process"
)
) +
labs(
y = "",
x = "Percentage of studies",
fill = "Risk of Bias"
) +
guides(fill = guide_legend(reverse = TRUE)) +
theme_bw() +
theme(
legend.position = "bottom"
)
rob_unweight_pct_studies_subgrp_mental
```Show the code
```{r rob2-subgroup-n-effects-mental}
#| label: fig-rob2-mental-n-effects-subgroup
#| fig-cap: "RoB2 plot for mental studies and outcomes by type of registration and outcome (number of effects)"
#| fig.width: 9
#| fig.height: 10
#| fig.retina: 2
#| message: false
rob_effects_subgrp_mental <-
rob_sum_subgrp_mental |>
mutate(
Rating = fct_rev(Rating),
level = "Effects"
) |>
ggplot(aes(x = effects, y = Category, fill = Rating)) +
geom_col(alpha = 0.9) +
facet_nested_wrap(outcome ~ prereg, scales = "free_x", ncol = 2) +
scale_fill_manual(
values = c("Low" = "mediumaquamarine", "Some concerns" = "lightgoldenrodyellow", "High" = "lightcoral")
) +
scale_y_discrete(
limits = rev,
labels = c(
expression(bold("Overall risk of bias")),
"Bias in selection of the reported result",
"Bias in measurement of the outcome",
"Bias due to missing outcome data",
"Bias due to deviations from intended interventions",
"Bias arising from the randomization process"
)
) +
labs(
y = "",
x = "Number of effects",
fill = "Risk of Bias"
) +
guides(fill = guide_legend(reverse = TRUE)) +
theme_bw() +
theme(
legend.position = "bottom"
) +
facetted_pos_scales(
x = list(
prereg == "Not preregistered" & outcome == "Anxiety" ~ scale_x_continuous(breaks = seq(0, 2, 1)),
prereg == "Preregistered" & outcome == "Anxiety" ~ scale_x_continuous(breaks = seq(0, 10, 2)),
prereg == "Not preregistered" & outcome == "Depression" ~ scale_x_continuous(breaks = seq(0, 10, 2)),
prereg == "Not preregistered" & outcome == "Symptoms of psychosis" ~ scale_x_continuous(breaks = seq(0, 10, 2))
)
)
rob_effects_subgrp_mental
```Show the code
```{r rob2-subgroup-effects-weighted-mental}
#| label: fig-rob2-mental-weigthed-effects-subgroup
#| fig-cap: "RoB2 plot for mental health studies and outcomes by type of registration and outcome (weighted percentage of effects)"
#| fig.width: 9
#| fig.height: 6
#| fig.retina: 2
#| message: false
# Weigthed percent
rob_weight_pct_effects_subgrp_mental <-
rob_sum_subgrp_mental |>
mutate(
Rating = fct_rev(Rating),
level = "Effects"
) |>
ggplot(aes(x = effects_pct_w, y = Category, fill = Rating)) +
geom_col(alpha = 0.9) +
facet_grid2(outcome ~ prereg, scales = "free_x") +
scale_fill_manual(
values = c("Low" = "mediumaquamarine", "Some concerns" = "lightgoldenrodyellow", "High" = "lightcoral")
) +
scale_y_discrete(
limits = rev,
labels = c(
expression(bold("Overall risk of bias")),
"Bias in selection of the reported result",
"Bias in measurement of the outcome",
"Bias due to missing outcome data",
"Bias due to deviations from intended interventions",
"Bias arising from the randomization process"
)
) +
labs(
y = "",
x = "Weighted percentage of effects",
fill = "Risk of Bias"
) +
guides(fill = guide_legend(reverse = TRUE)) +
theme_bw() +
theme(
legend.position = "bottom"
)
rob_weight_pct_effects_subgrp_mental
```Show the code
```{r rob2-subgroup-effects-unweight-mental}
#| label: fig-rob2-mental-unweigthed-effects-subgroup
#| fig-cap: "RoB2 plot for mental health studies and outcomes by type of registration and outcome (unweighted percentage of effects)"
#| fig.width: 9
#| fig.height: 6
#| fig.retina: 2
#| message: false
# unweigthed percent
rob_unweight_pct_effects_subgrp_mental <-
rob_sum_subgrp_mental |>
mutate(
Rating = fct_rev(Rating),
level = "Studies"
) |>
ggplot(aes(x = effects_pct, y = Category, fill = Rating)) +
geom_col(alpha = 0.9) +
facet_grid2(outcome ~ prereg, scales = "free_x") +
scale_fill_manual(
values = c("Low" = "mediumaquamarine", "Some concerns" = "lightgoldenrodyellow", "High" = "lightcoral")
) +
scale_y_discrete(
limits = rev,
labels = c(
expression(bold("Overall risk of bias")),
"Bias in selection of the reported result",
"Bias in measurement of the outcome",
"Bias due to missing outcome data",
"Bias due to deviations from intended interventions",
"Bias arising from the randomization process"
)
) +
labs(
y = "",
x = "Percentage of effects",
fill = "Risk of Bias"
) +
guides(fill = guide_legend(reverse = TRUE)) +
theme_bw() +
theme(
legend.position = "bottom"
)
rob_unweight_pct_effects_subgrp_mental
```ROBINS-I
Show the code
```{r ROBINS-I-dat}
reint_robinsi_dat <-
reintegation_dat |>
mutate(
kj = n(),
sigma2j = mean(vgt_pop),
weight = 1 / (kj*tau2 + omega2 + (kj-1)*rho*sigma2j + sigma2j),
.by = study
) |>
filter(rob_tool == "ROBINS-I") |>
select(
prereg = prereg_chr, study, D1:Overall, weight
)
robinsi_sum <-
reint_robinsi_dat |>
pivot_longer(D1:Overall, names_to = "Category", values_to = "Rating") |>
mutate(
Category = factor(
Category, levels = c(paste0("D", 1:7), "Overall"),
labels = c(
"Bias due to confounding",
"Bias due to selection of participants",
"Bias in classification of interventions",
"Bias due to deviations from intended interventions",
"Bias due to missing data",
"Bias in measurement of outcomes",
"Bias in selection of the reported result",
"Overall risk of bias"
)
),
Rating = factor(Rating, levels = c("Low", "Moderate", "Serious"))
) |>
group_by(Category, Rating, study) |>
summarize(
effects = n(),
weight = sum(weight),
.groups = "drop_last"
) |>
summarise(
studies = length(unique(study)),
effects = sum(effects),
weight = sum(weight),
.groups = "drop_last"
) |>
mutate(
effects_pct = 100 * effects / sum(effects),
studies_pct = 100 * studies / sum(studies),
effects_pct_w = weight/sum(weight) * 100,
studies_w = studies * weight,
studies_pct_w = studies_w / sum(studies_w) * 100
) |>
ungroup()
# Mental health
mental_robinsi_dat <-
mental_health_dat |>
mutate(
kj = n(),
sigma2j = mean(vgt_pop),
weight = 1 / (kj*tau2 + omega2 + (kj-1)*rho*sigma2j + sigma2j),
.by = study
) |>
filter(rob_tool == "ROBINS-I") |>
select(
prereg = prereg_chr, study, D1:Overall, weight
)
robinsi_sum_mental <-
mental_robinsi_dat |>
pivot_longer(D1:Overall, names_to = "Category", values_to = "Rating") |>
mutate(
Category = factor(
Category, levels = c(paste0("D", 1:7), "Overall"),
labels = c(
"Bias due to confounding",
"Bias due to selection of participants",
"Bias in classification of interventions",
"Bias due to deviations from intended interventions",
"Bias due to missing data",
"Bias in measurement of outcomes",
"Bias in selection of the reported result",
"Overall risk of bias"
)
),
Rating = factor(Rating, levels = c("Low", "Moderate", "Serious"))
) |>
group_by(Category, Rating, study) |>
summarize(
effects = n(),
weight = sum(weight),
.groups = "drop_last"
) |>
summarise(
studies = length(unique(study)),
effects = sum(effects),
weight = sum(weight),
.groups = "drop_last"
) |>
mutate(
effects_pct = 100 * effects / sum(effects),
studies_pct = 100 * studies / sum(studies),
effects_pct_w = weight/sum(weight) * 100,
studies_w = studies * weight,
studies_pct_w = studies_w / sum(studies_w) * 100
) |>
ungroup()
```Show the code
```{r robins-i-raw}
#| label: fig-rob2-robins-i-raw
#| fig-cap: "ROBINS-I plot for reintegration QES studies and outcomes (raw number)"
#| fig.width: 12
#| fig.height: 5
#| fig.retina: 2
#| message: false
robin_studies <-
robinsi_sum |>
mutate(
Rating = fct_rev(Rating),
level = "Studies"
) |>
ggplot(aes(x = studies, y = Category, fill = Rating)) +
geom_col(alpha = 0.9) +
facet_grid(~ level, scales = "free_x") +
scale_fill_manual(
values = c("Low" = "mediumaquamarine", "Moderate" = "lightgoldenrodyellow", "Serious" = "lightcoral")
) +
scale_y_discrete(
limits = rev,
labels = c(
expression(bold("Overall risk of bias")),
"Bias in selection of the reported result",
"Bias in measurement of outcomes",
"Bias due to missing data",
"Bias due to deviations from intended interventions",
"Bias in classification of interventions",
"Bias due to selection of participants",
"Bias due to confounding"
)
) +
labs(
y = "",
x = "Raw number",
fill = "Risk of Bias"
) +
guides(fill = guide_legend(reverse = TRUE)) +
theme_bw() +
theme(
legend.position = "bottom"
)
robin_effects <-
robinsi_sum |>
mutate(
Rating = fct_rev(Rating),
level = "Effects"
) |>
ggplot(aes(x = effects, y = Category, fill = Rating)) +
geom_col(alpha = 0.9) +
facet_grid(~ level, scales = "free_x") +
scale_fill_manual(
values = c("Low" = "mediumaquamarine", "Moderate" = "lightgoldenrodyellow", "Serious" = "lightcoral")
) +
scale_y_discrete(
limits = rev,
labels = c(
expression(bold("Overall risk of bias")),
"Bias in selection of the reported result",
"Bias in measurement of outcomes",
"Bias due to missing data",
"Bias due to deviations from intended interventions",
"Bias in classification of interventions",
"Bias due to selection of participants",
"Bias due to confounding"
)
) +
labs(
y = "",
x = "Raw number",
fill = "Risk of Bias"
) +
guides(fill = guide_legend(reverse = TRUE)) +
theme_bw() +
theme(
legend.position = "bottom",
axis.ticks.y = element_blank(),
axis.text.y = element_blank()
)
(robin_studies + robin_effects) +
plot_layout(guides = "collect", axis_titles = "collect") & theme(legend.position = 'bottom')
```Show the code
```{r robins-i-weighted}
#| label: fig-rob2-robins-i-weigthed
#| fig-cap: "ROBINS-I plot for reintegration QES studies and outcomes (weighted percentage)"
#| fig.width: 12
#| fig.height: 5
#| fig.retina: 2
#| message: false
robin_pct_studies_weight <-
robinsi_sum |>
mutate(
Rating = fct_rev(Rating),
level = "Studies"
) |>
ggplot(aes(x = studies_pct_w, y = Category, fill = Rating)) +
geom_col(alpha = 0.9) +
facet_grid(~ level, scales = "free_x") +
scale_fill_manual(
values = c("Low" = "mediumaquamarine", "Moderate" = "lightgoldenrodyellow", "Serious" = "lightcoral")
) +
scale_y_discrete(
limits = rev,
labels = c(
expression(bold("Overall risk of bias")),
"Bias in selection of the reported result",
"Bias in measurement of outcomes",
"Bias due to missing data",
"Bias due to deviations from intended interventions",
"Bias in classification of interventions",
"Bias due to selection of participants",
"Bias due to confounding"
)
) +
labs(
y = "",
x = "Weighted percentage",
fill = "Risk of Bias"
) +
guides(fill = guide_legend(reverse = TRUE)) +
theme_bw() +
theme(
legend.position = "bottom"
)
robin_pct_effects_weight <-
robinsi_sum |>
mutate(
Rating = fct_rev(Rating),
level = "% Effects"
) |>
ggplot(aes(x = effects_pct_w, y = Category, fill = Rating)) +
geom_col(alpha = 0.9) +
facet_grid(~ level, scales = "free_x") +
scale_fill_manual(
values = c("Low" = "mediumaquamarine", "Moderate" = "lightgoldenrodyellow", "Serious" = "lightcoral")
) +
scale_y_discrete(
limits = rev,
labels = c(
expression(bold("Overall risk of bias")),
"Bias in selection of the reported result",
"Bias in measurement of outcomes",
"Bias due to missing data",
"Bias due to deviations from intended interventions",
"Bias in classification of interventions",
"Bias due to selection of participants",
"Bias due to confounding"
)
) +
labs(
y = "",
x = "Weighted percentage",
fill = "Risk of Bias"
) +
guides(fill = guide_legend(reverse = TRUE)) +
theme_bw() +
theme(
legend.position = "bottom",
axis.ticks.y = element_blank(),
axis.text.y = element_blank()
)
(robin_pct_studies_weight + robin_pct_effects_weight) +
plot_layout(guides = "collect", axis_titles = "collect") & theme(legend.position = 'bottom')
```Show the code
```{r robins-i-unweighted}
#| label: fig-rob2-robins-i-unweigthed
#| fig-cap: "ROBINS-I plot for reintegration QES studies and outcomes (unweighted percentage)"
#| fig.width: 12
#| fig.height: 5
#| fig.retina: 2
#| message: false
robin_pct_studies_unweight <-
robinsi_sum |>
mutate(
Rating = fct_rev(Rating),
level = "Studies"
) |>
ggplot(aes(x = studies_pct, y = Category, fill = Rating)) +
geom_col(alpha = 0.9) +
facet_grid(~ level, scales = "free_x") +
scale_fill_manual(
values = c("Low" = "mediumaquamarine", "Moderate" = "lightgoldenrodyellow", "Serious" = "lightcoral")
) +
scale_y_discrete(
limits = rev,
labels = c(
expression(bold("Overall risk of bias")),
"Bias in selection of the reported result",
"Bias in measurement of outcomes",
"Bias due to missing data",
"Bias due to deviations from intended interventions",
"Bias in classification of interventions",
"Bias due to selection of participants",
"Bias due to confounding"
)
) +
labs(
y = "",
x = "Percentage",
fill = "Risk of Bias"
) +
guides(fill = guide_legend(reverse = TRUE)) +
theme_bw() +
theme(
legend.position = "bottom"
)
robin_pct_effects_unweight <-
robinsi_sum |>
mutate(
Rating = fct_rev(Rating),
level = "Effects"
) |>
ggplot(aes(x = effects_pct, y = Category, fill = Rating)) +
geom_col(alpha = 0.9) +
facet_grid(~ level, scales = "free_x") +
scale_fill_manual(
values = c("Low" = "mediumaquamarine", "Moderate" = "lightgoldenrodyellow", "Serious" = "lightcoral")
) +
scale_y_discrete(
limits = rev,
labels = c(
expression(bold("Overall risk of bias")),
"Bias in selection of the reported result",
"Bias in measurement of outcomes",
"Bias due to missing data",
"Bias due to deviations from intended interventions",
"Bias in classification of interventions",
"Bias due to selection of participants",
"Bias due to confounding"
)
) +
labs(
y = "",
x = "Percentage",
fill = "Risk of Bias"
) +
guides(fill = guide_legend(reverse = TRUE)) +
theme_bw() +
theme(
legend.position = "bottom",
axis.ticks.y = element_blank(),
axis.text.y = element_blank()
)
(robin_pct_studies_unweight + robin_pct_effects_unweight) +
plot_layout(guides = "collect", axis_titles = "collect") & theme(legend.position = 'bottom')
```Show the code
```{r robins-i-raw-mental}
#| label: fig-rob2-robins-i-raw-mental
#| fig-cap: "ROBINS-I plot for mental health QES studies and outcomes (raw number)"
#| fig.width: 12
#| fig.height: 5
#| fig.retina: 2
#| message: false
robin_studies_mental <-
robinsi_sum_mental |>
mutate(
Rating = fct_rev(Rating),
level = "Studies"
) |>
ggplot(aes(x = studies, y = Category, fill = Rating)) +
geom_col(alpha = 0.9) +
facet_grid(~ level, scales = "free_x") +
scale_fill_manual(
values = c("Low" = "mediumaquamarine", "Moderate" = "lightgoldenrodyellow", "Serious" = "lightcoral")
) +
scale_y_discrete(
limits = rev,
labels = c(
expression(bold("Overall risk of bias")),
"Bias in selection of the reported result",
"Bias in measurement of outcomes",
"Bias due to missing data",
"Bias due to deviations from intended interventions",
"Bias in classification of interventions",
"Bias due to selection of participants",
"Bias due to confounding"
)
) +
labs(
y = "",
x = "Raw number",
fill = "Risk of Bias"
) +
guides(fill = guide_legend(reverse = TRUE)) +
theme_bw() +
theme(
legend.position = "bottom"
)
robin_effects_mental <-
robinsi_sum_mental |>
mutate(
Rating = fct_rev(Rating),
level = "Effects"
) |>
ggplot(aes(x = effects, y = Category, fill = Rating)) +
geom_col(alpha = 0.9) +
facet_grid(~ level, scales = "free_x") +
scale_fill_manual(
values = c("Low" = "mediumaquamarine", "Moderate" = "lightgoldenrodyellow", "Serious" = "lightcoral")
) +
scale_y_discrete(
limits = rev,
labels = c(
expression(bold("Overall risk of bias")),
"Bias in selection of the reported result",
"Bias in measurement of outcomes",
"Bias due to missing data",
"Bias due to deviations from intended interventions",
"Bias in classification of interventions",
"Bias due to selection of participants",
"Bias due to confounding"
)
) +
labs(
y = "",
x = "Raw number",
fill = "Risk of Bias"
) +
guides(fill = guide_legend(reverse = TRUE)) +
theme_bw() +
theme(
legend.position = "bottom",
axis.ticks.y = element_blank(),
axis.text.y = element_blank()
)
(robin_studies_mental + robin_effects_mental) +
plot_layout(guides = "collect", axis_titles = "collect") & theme(legend.position = 'bottom')
```Show the code
```{r robins-i-weighted-mental}
#| label: fig-rob2-robins-i-weigthed-mental
#| fig-cap: "ROBINS-I plot for mental health QES studies and outcomes (weighted percentage)"
#| fig.width: 12
#| fig.height: 5
#| fig.retina: 2
#| message: false
robin_pct_studies_weight_mental <-
robinsi_sum_mental |>
mutate(
Rating = fct_rev(Rating),
level = "Studies"
) |>
ggplot(aes(x = studies_pct_w, y = Category, fill = Rating)) +
geom_col(alpha = 0.9) +
facet_grid(~ level, scales = "free_x") +
scale_fill_manual(
values = c("Low" = "mediumaquamarine", "Moderate" = "lightgoldenrodyellow", "Serious" = "lightcoral")
) +
scale_y_discrete(
limits = rev,
labels = c(
expression(bold("Overall risk of bias")),
"Bias in selection of the reported result",
"Bias in measurement of outcomes",
"Bias due to missing data",
"Bias due to deviations from intended interventions",
"Bias in classification of interventions",
"Bias due to selection of participants",
"Bias due to confounding"
)
) +
labs(
y = "",
x = "Weighted percentage",
fill = "Risk of Bias"
) +
guides(fill = guide_legend(reverse = TRUE)) +
theme_bw() +
theme(
legend.position = "bottom"
)
robin_pct_effects_weight_mental <-
robinsi_sum_mental |>
mutate(
Rating = fct_rev(Rating),
level = "Effects"
) |>
ggplot(aes(x = effects_pct_w, y = Category, fill = Rating)) +
geom_col(alpha = 0.9) +
facet_grid(~ level, scales = "free_x") +
scale_fill_manual(
values = c("Low" = "mediumaquamarine", "Moderate" = "lightgoldenrodyellow", "Serious" = "lightcoral")
) +
scale_y_discrete(
limits = rev,
labels = c(
expression(bold("Overall risk of bias")),
"Bias in selection of the reported result",
"Bias in measurement of outcomes",
"Bias due to missing data",
"Bias due to deviations from intended interventions",
"Bias in classification of interventions",
"Bias due to selection of participants",
"Bias due to confounding"
)
) +
labs(
y = "",
x = "Weighted percentage",
fill = "Risk of Bias"
) +
guides(fill = guide_legend(reverse = TRUE)) +
theme_bw() +
theme(
legend.position = "bottom",
axis.ticks.y = element_blank(),
axis.text.y = element_blank()
)
(robin_pct_studies_weight_mental + robin_pct_effects_weight_mental) +
plot_layout(guides = "collect", axis_titles = "collect") & theme(legend.position = 'bottom')
```Show the code
```{r robins-i-unweighted-mental}
#| label: fig-rob2-robins-i-unweigthed-mental
#| fig-cap: "ROBINS-I plot for mental health QES studies and outcomes (unweighted percentage)"
#| fig.width: 12
#| fig.height: 5
#| fig.retina: 2
#| message: false
robin_pct_studies_unweight_mental <-
robinsi_sum_mental |>
mutate(
Rating = fct_rev(Rating),
level = "Studies"
) |>
ggplot(aes(x = studies_pct, y = Category, fill = Rating)) +
geom_col(alpha = 0.9) +
facet_grid(~ level, scales = "free_x") +
scale_fill_manual(
values = c("Low" = "mediumaquamarine", "Moderate" = "lightgoldenrodyellow", "Serious" = "lightcoral")
) +
scale_y_discrete(
limits = rev,
labels = c(
expression(bold("Overall risk of bias")),
"Bias in selection of the reported result",
"Bias in measurement of outcomes",
"Bias due to missing data",
"Bias due to deviations from intended interventions",
"Bias in classification of interventions",
"Bias due to selection of participants",
"Bias due to confounding"
)
) +
labs(
y = "",
x = "Percentage",
fill = "Risk of Bias"
) +
guides(fill = guide_legend(reverse = TRUE)) +
theme_bw() +
theme(
legend.position = "bottom"
)
robin_pct_effects_unweight_mental <-
robinsi_sum_mental |>
mutate(
Rating = fct_rev(Rating),
level = "Effects"
) |>
ggplot(aes(x = effects_pct, y = Category, fill = Rating)) +
geom_col(alpha = 0.9) +
facet_grid(~ level, scales = "free_x") +
scale_fill_manual(
values = c("Low" = "mediumaquamarine", "Moderate" = "lightgoldenrodyellow", "Serious" = "lightcoral")
) +
scale_y_discrete(
limits = rev,
labels = c(
expression(bold("Overall risk of bias")),
"Bias in selection of the reported result",
"Bias in measurement of outcomes",
"Bias due to missing data",
"Bias due to deviations from intended interventions",
"Bias in classification of interventions",
"Bias due to selection of participants",
"Bias due to confounding"
)
) +
labs(
y = "",
x = "Percentage",
fill = "Risk of Bias"
) +
guides(fill = guide_legend(reverse = TRUE)) +
theme_bw() +
theme(
legend.position = "bottom",
axis.ticks.y = element_blank(),
axis.text.y = element_blank()
)
(robin_pct_studies_unweight_mental + robin_pct_effects_unweight_mental) +
plot_layout(guides = "collect", axis_titles = "collect") & theme(legend.position = 'bottom')
```Descriptives and Dependence Structures
Timeline
Show the code
```{r, time-plot}
#| label: fig-time-plot
#| fig-cap: "Number of studies included in meta-analysis by year."
#| fig-width: 12
#| fig-height: 8
#| message: false
# Figure 1: Number of included studies in the meta-analysis by year
G_timeplot <-
group_based_dat |>
mutate(
prereg = if_else(
str_detect(protocol, regex("yes", ignore_case = TRUE)),
"Preregistered", "Not preregistered"
)
) |>
reframe(year = unique(year), prereg = unique(prereg), .by = study)
# DONE
timeline_plot <- ggplot(G_timeplot, aes(x = year, fill = prereg)) +
geom_bar(col = "black", alpha = 1, width = 1) +
scale_x_continuous(breaks = seq(2000, 2022, 1)) +
scale_y_continuous(breaks = seq(0, 6.5, 1), limits = c(0, 7), expand = c(0,0)) +
theme_bw() +
scale_fill_brewer(palette="Paired")+
theme(
axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1),
#panel.border = element_blank(),
legend.position = "bottom",
legend.title = element_blank(),
panel.grid.minor = element_blank(),
panel.grid.major.x = element_blank(),
axis.line = element_line(colour = "black")
) +
labs(
x = "Year of publication",
y = "Number of studies",
)
timeline_plot
```Number effects across effect size metrics
Show the code
```{r}
# Number of studies reporting OR
group_based_dat |>
summarise(
n = n(),
.by = c(study, effect_size)
) |>
summarise(
N_studies = length(effect_size),
N_es = sum(n),
.by = effect_size
)
```# A tibble: 2 × 3
effect_size N_studies N_es
<chr> <int> <int>
1 SMD 48 388
2 OR 1 2
Number of effect size estimates per study
Overall per study
Show the code
```{r es-plot}
#| label: fig-es-hist-per-stud
#| fig-cap: "Distribution of number of effect size estimates per study"
#| fig.width: 6.5
#| fig.height: 7
#| message: false
es_plot_per_study <-
gb_dat |>
arrange(desc(study)) |>
mutate(study = factor(study, unique(study))) |>
ggplot(aes(x = study)) +
geom_bar(aes(fill = outcome_construct)) +
scale_y_continuous(breaks = seq(5, 40, by = 5)) +
theme_minimal() +
theme(
legend.position = "bottom"
) +
coord_flip() +
labs(
x = paste0("Study (", n_distinct(gb_dat$study), " studies in total)"),
y = "Number of Effect Size Estimates",
fill = "Outcome construct"
) +
guides(fill = guide_legend(reverse=TRUE))
es_plot_per_study
```Across outcome subgroups per study
Show the code
```{r es-plot-reint}
#| label: fig-es-hist-per-stud-reint
#| fig-cap: "Distribution of number of effects per study, by direction of the effects for reintegrational outcomes."
#| fig-width: 12
#| fig-height: 8
#| message: false
reintegation_dat |>
ggplot(aes(y = study, fill = gt_pop >= 0)) +
geom_bar(data = subset(reintegation_dat, gt_pop >= 0), aes(x = after_stat(count)), stat = "count") +
geom_bar(data = subset(reintegation_dat, gt_pop < 0), aes(x = -after_stat(count)), stat = "count") +
theme_minimal() +
scale_x_continuous(labels = abs, breaks = scales::breaks_width(5), limits = c(-10, 30)) +
scale_y_discrete(limits=rev) +
scale_fill_manual(
values = c(met.brewer("Navajo")[2], met.brewer("Navajo")[4]),
labels = c("Negative ES", "Non-negative ES"),
name = "Effect Size"
) +
labs(x = "Number of Effect Size Estimates", y = "", title = "Reintegration") +
theme(
legend.position = "bottom",
#legend.position.inside = c(0.95, 0.05),
#legend.justification = c(1, 0),
legend.background = element_blank(),
plot.title = element_text(hjust = 0.5)
)
```Show the code
```{r es-plot-mental}
#| label: fig-es-hist-per-stud-mental
#| fig-cap: "Distribution of number of effects per study, by direction of the effects for mental health outcomes."
#| fig-height: 8.5
#| message: false
mental_health_dat |>
ggplot(aes(y = study, fill = gt_pop >= 0)) +
geom_bar(data = subset(mental_health_dat, gt_pop >= 0), aes(x = after_stat(count)), stat = "count") +
geom_bar(data = subset(mental_health_dat, gt_pop < 0), aes(x = -after_stat(count)), stat = "count") +
theme_minimal() +
scale_x_continuous(labels = abs, breaks = scales::breaks_width(5), limits = c(-5, 15)) +
scale_y_discrete(limits=rev) +
scale_fill_manual(
values = c(met.brewer("Navajo")[2], met.brewer("Navajo")[4]),
labels = c("Negative ES", "Non-negative ES"),
name = "Effect Size"
) +
labs(x = "Number of Effect Size Estimates", y = "", title = "Mental Health") +
theme(
legend.position = "bottom",
#legend.position.inside = c(0.95, 0.2),
#legend.justification = c(1, 0),
legend.background = element_blank(),
plot.title = element_text(hjust = 0.5)
)
```Overall across all studies and outcomes
Show the code
```{r structure}
# Multi-arms studies
multi_arm_studies <-
gb_dat |>
filter(trt_id > 1) |>
reframe(study = unique(study))
# Multi-time-points studies
follow_up_studies <-
gb_dat |>
summarise(
time_points = length(unique(time_after_end_intervention_weeks)),
.by = c(study, trt_id, ctr_id)
) |>
filter(time_points > 1)
# Preregistered studies
prereg_studies <-
gb_dat |>
summarise(
prereg_chr = unique(prereg_chr),
n_es = n(),
.by = study
) |>
summarise(
N_studies = n_distinct(study),
N_es = sum(n_es),
.by = prereg_chr
)
study_sample_sizes <-
gb_dat |>
group_by(study, trt_id, ctr_id) |>
summarise(
effects = n(),
participants = max(N_total)
) |>
summarise(
effects = sum(effects),
participants = mean(participants),
ctl_comparisons = n(),
ctl_arms = paste(ctr_id, collapse = "; ")
) |>
group_by(study, ctl_arms) |>
summarise(
effects = sum(effects),
participants = mean(participants * (1 + ctl_comparisons * (n() - 1) / 2)),
trt_comparisons = n(),
trt_arms = paste(trt_id, collapse = "; "),
ctl_comparisons = mean(ctl_comparisons)
) |>
summarise(
effects = sum(effects),
participants = sum(participants),
trt_comparisons = mean(trt_comparisons),
ctl_comparisons = sum(ctl_comparisons)
)
sample_size_summary <-
study_sample_sizes |>
summarise(
studies = n(),
studies_multiple_tx = sum(trt_comparisons > 1),
studies_multiple_ctl = sum(ctl_comparisons > 1),
n_effects = sum(effects),
mean_effects = mean(effects),
min_effects = min(effects),
median_effects = median(effects),
max_effects = max(effects),
participants = round(sum(participants))
) |>
mutate(prereg = prereg_studies$N_studies[1])
n_studies <- sample_size_summary$studies
```Show the code
```{r structure-table}
#| tbl-cap: "Data structure for the all data."
#| tbl-cap-location: top
#| label: tbl-es-structure
kable(
sample_size_summary,
col.names = c(
studies = "Studies",
studies_multiple_tx = "Multi-treatment studies",
studies_multiple_ctl = "Multi-control studies",
n_effects = "Effects",
mean_effects = "Mean",
min_effects = "Minimum",
median_effects = "Median",
max_effects = "Maximum",
participants = "Participants",
prereg = "Preregistered studies"
),
digits = 1
) |>
kable_styling(bootstrap_options = c("striped", "condensed"),
full_width = FALSE)
```| Studies | Multi-treatment studies | Multi-control studies | Effects | Mean | Minimum | Median | Maximum | Participants | Preregistered studies |
|---|---|---|---|---|---|---|---|---|---|
| 48 | 3 | 0 | 343 | 7.1 | 1 | 4.5 | 40 | 5527 | 24 |
Show the code
```{r, sum-es-per-study-plot}
#| label: fig-es-hist
#| fig-cap: "Distribution of number of effect size estimates per study"
#| fig.width: 9
#| fig.height: 7
#| message: false
gb_dat |>
summarise(
es_count = n(),
.by = study
) |>
arrange(es_count) |>
ggplot(aes(x = es_count)) +
geom_histogram(binwidth = 0.5, fill = met.brewer("Navajo")[4]) +
scale_x_continuous(breaks = seq(0, 40, by = 5)) +
scale_y_continuous(breaks = seq(0, 10, 2)) +
theme_minimal() +
labs(x = "Effect Size Estimates per Study", y = "Number of Studies")
```Across outcome subgroups
Show the code
```{r structure-reint}
# Multi-arms studies
multi_arm_studies_reint <-
reintegation_dat |>
filter(trt_id > 1) |>
reframe(study = unique(study))
# Multi-time-points studies
follow_up_studies_reint <-
reintegation_dat |>
summarise(
time_points = length(unique(time_after_end_intervention_weeks)),
.by = c(study, trt_id, ctr_id)
) |>
filter(time_points > 1)
# Preregistered studies
prereg_studies_reint <-
reintegation_dat |>
summarise(
prereg_chr = unique(prereg_chr),
n_es = n(),
.by = study
) |>
summarise(
N_studies = n_distinct(study),
N_es = sum(n_es),
.by = prereg_chr
)
study_sample_sizes_reint <-
reintegation_dat |>
group_by(study, trt_id, ctr_id) |>
summarise(
effects = n(),
participants = max(N_total)
) |>
summarise(
effects = sum(effects),
participants = mean(participants),
ctl_comparisons = n(),
ctl_arms = paste(ctr_id, collapse = "; ")
) |>
group_by(study, ctl_arms) |>
summarise(
effects = sum(effects),
participants = mean(participants * (1 + ctl_comparisons * (n() - 1) / 2)),
trt_comparisons = n(),
trt_arms = paste(trt_id, collapse = "; "),
ctl_comparisons = mean(ctl_comparisons)
) |>
summarise(
effects = sum(effects),
participants = sum(participants),
trt_comparisons = mean(trt_comparisons),
ctl_comparisons = sum(ctl_comparisons)
)
sample_size_summary_reint <-
study_sample_sizes_reint |>
summarise(
studies = n(),
studies_multiple_tx = sum(trt_comparisons > 1),
studies_multiple_ctl = sum(ctl_comparisons > 1),
n_effects = sum(effects),
mean_effects = mean(effects),
min_effects = min(effects),
median_effects = median(effects),
max_effects = max(effects),
participants = round(sum(participants))
) |>
mutate(prereg = prereg_studies_reint$N_studies[1])
n_studies_reint <- sample_size_summary_reint$studies
```Show the code
```{r structure-table-reint}
#| tbl-cap: "Data structure for the reintegrational data."
#| tbl-cap-location: top
#| label: tbl-es-structure-reint
kable(
sample_size_summary_reint,
col.names = c(
studies = "Studies",
studies_multiple_tx = "Multi-treatment studies",
studies_multiple_ctl = "Multi-control studies",
n_effects = "Effects",
mean_effects = "Mean",
min_effects = "Minimum",
median_effects = "Median",
max_effects = "Maximum",
participants = "Participants",
prereg = "Preregistered studies"
),
digits = 1
) |>
kable_styling(bootstrap_options = c("striped", "condensed"),
full_width = FALSE)
```| Studies | Multi-treatment studies | Multi-control studies | Effects | Mean | Minimum | Median | Maximum | Participants | Preregistered studies |
|---|---|---|---|---|---|---|---|---|---|
| 45 | 3 | 0 | 202 | 4.5 | 1 | 3 | 28 | 5390 | 23 |
Show the code
```{r structure-mental}
# Multi-arms studies
multi_arm_studies_mental <-
mental_health_dat |>
filter(trt_id > 1) |>
reframe(study = unique(study))
# Multi-time-points studies
follow_up_studies_mental <-
mental_health_dat |>
summarise(
time_points = length(unique(time_after_end_intervention_weeks)),
.by = c(study, trt_id, ctr_id)
) |>
filter(time_points > 1)
# Preregistered studies
prereg_studies_mental <-
mental_health_dat |>
summarise(
prereg_chr = unique(prereg_chr),
n_es = n(),
.by = study
) |>
summarise(
N_studies = n_distinct(study),
N_es = sum(n_es),
.by = prereg_chr
)
study_sample_sizes_mental <-
mental_health_dat |>
group_by(study, trt_id, ctr_id) |>
summarise(
effects = n(),
participants = max(N_total)
) |>
summarise(
effects = sum(effects),
participants = mean(participants),
ctl_comparisons = n(),
ctl_arms = paste(ctr_id, collapse = "; ")
) |>
group_by(study, ctl_arms) |>
summarise(
effects = sum(effects),
participants = mean(participants * (1 + ctl_comparisons * (n() - 1) / 2)),
trt_comparisons = n(),
trt_arms = paste(trt_id, collapse = "; "),
ctl_comparisons = mean(ctl_comparisons)
) |>
summarise(
effects = sum(effects),
participants = sum(participants),
trt_comparisons = mean(trt_comparisons),
ctl_comparisons = sum(ctl_comparisons)
)
sample_size_summary_mental <-
study_sample_sizes_mental |>
summarise(
studies = n(),
studies_multiple_tx = sum(trt_comparisons > 1),
studies_multiple_ctl = sum(ctl_comparisons > 1),
n_effects = sum(effects),
mean_effects = mean(effects),
min_effects = min(effects),
median_effects = median(effects),
max_effects = max(effects),
participants = round(sum(participants))
) |>
mutate(prereg = prereg_studies_mental$N_studies[1])
n_studies_mental <- sample_size_summary_mental$studies
```Show the code
```{r structure-table-mental}
#| tbl-cap: "Data structure for the mental health data."
#| tbl-cap-location: top
#| label: tbl-es-structure-mental
kable(
sample_size_summary_mental,
col.names = c(
studies = "Studies",
studies_multiple_tx = "Multi-treatment studies",
studies_multiple_ctl = "Multi-control studies",
n_effects = "Effects",
mean_effects = "Mean",
min_effects = "Minimum",
median_effects = "Median",
max_effects = "Maximum",
participants = "Participants",
prereg = "Preregistered studies"
),
digits = 1
) |>
kable_styling(bootstrap_options = c("striped", "condensed"),
full_width = FALSE)
```| Studies | Multi-treatment studies | Multi-control studies | Effects | Mean | Minimum | Median | Maximum | Participants | Preregistered studies |
|---|---|---|---|---|---|---|---|---|---|
| 41 | 3 | 0 | 141 | 3.4 | 1 | 2 | 18 | 4663 | 21 |
Show the code
```{r sum-es-plot-reint}
#| label: fig-es-hist-reint
#| fig-cap: "Distribution of number of effects per study for mental for reintegrational outcomes."
#| fig-width: 9
#| fig-height: 6
#| message: false
reintegation_dat |>
summarise(
es_count = n(),
.by = study
) |>
arrange(es_count) |>
ggplot(aes(x = es_count)) +
geom_histogram(binwidth = 0.5, fill = "cornflowerblue") +
scale_x_continuous(breaks = seq(0, 30, by = 5)) +
scale_y_continuous(breaks = seq(0, 14, 2), limits = c(0, 14)) +
theme_minimal() +
theme(plot.title = element_text(hjust = 0.5)) +
labs(x = "Effect Size Estimates per Study", y = "Number of Studies", title = "Reintegration") +
expand_limits(x = 30)
```Show the code
```{r es-plot-mental}
#| label: fig-es-hist-mental
#| fig-cap: "Distribution of number of effects per study for mental health outcomes."
#| fig-height: 8
#| message: false
mental_health_dat |>
summarise(
es_count = n(),
.by = study
) |>
arrange(es_count) |>
ggplot(aes(x = es_count)) +
geom_histogram(binwidth = 0.5, fill = "gray") +
scale_x_continuous(breaks = seq(0, 20, by = 5)) +
scale_y_continuous(breaks = seq(0, 10, 2), limits = c(0, 11)) +
theme_minimal() +
theme(plot.title = element_text(hjust = 0.5)) +
labs(x = "Effect Size Estimates per Study", y = "Number of Studies", title = "Mental Health") +
expand_limits(x = 20)
```Data structure by outcome constructs
Show the code
```{r labeled-cat-hist-ridge-function}
label_cat_hist_ridge <- function(data, n_es, variable, label_map, level_order) {
require(dplyr)
require(rlang)
require(tidyr)
require(ggplot2)
require(forcats)
n_es_exp <- enquo(n_es)
var_exp <- enquo(variable)
data <- data |>
mutate(
!!var_exp := fct_recode(!!var_exp, !!!label_map),
!!var_exp := fct_relevel(!!var_exp, !!!level_order),
!!var_exp := fct_rev(!!var_exp)
)
ggplot(data, aes(
x = !!n_es_exp,
y = !!var_exp,
fill = !!var_exp
)) +
geom_density_ridges(
alpha = 1,
stat = "binline",
bins = 30,
scale = 0.7,
linewidth = 0.1,
draw_baseline = FALSE
) +
theme_minimal() +
labs(y = "", x = "Effect Size Estimates per Study") +
theme(legend.position = "none")
}
```The following plot shows the effect size estimates distribution within each outcome construct.
Show the code
```{r outcome-construct-ridge-hist}
#| label: fig-outcome-construct-ridge-hist
#| fig-cap: "Distribution of effect size estimates, by reintegrational outcome constructs."
#| fig.width: 9
#| fig.height: 6.5
#| fig.retina: 2
#| message: false
n_es_by_construct <-
gb_dat |>
filter(str_detect(outcome_construct, "Re")) |>
summarise(effects = n(), .by = c(study, analysis_plan)) |>
mutate(J = n(), .by = c(analysis_plan)) |>
arrange(desc(J))
# Used to construct out_label
#label_dat <-
# n_es_by_construct |>
# summarise(J = n(), N_es = sum(effects), .by = analysis_plan)
out_label <- c(
"Wellbeing and quality of life (J = 24, K = 67)" = "Wellbeing and quality of life",
"Social functioning (degree of impairment) (J =16, K = 47)" = "Social functioning (degree of impairment)",
"Hope, empowerment & self-efficacy (J = 12, K = 32)" = "Hope, empowerment & self-efficacy",
"Alcohol and drug abuse/misuse (J = 7, K = 31)" = "Alcohol and drug abuse/misuse",
"Self-esteem (J = 5, K = 14)" = "Self-esteem",
"Loneliness (J = 4, K = 5)" = "Loneliness",
"Physical health (J = 2, K = 3)" = "Physical health",
"Psychiatric hospitalization (J = 1, K = 1)" = "Psychiatric hospitalization",
"Employment (J = 1, K = 2)" = "Employment"
)
out_level <- c(
"Wellbeing and quality of life (J = 24, K = 67)",
"Social functioning (degree of impairment) (J =16, K = 47)",
"Hope, empowerment & self-efficacy (J = 12, K = 32)",
"Alcohol and drug abuse/misuse (J = 7, K = 31)",
"Self-esteem (J = 5, K = 14)",
"Loneliness (J = 4, K = 5)",
"Physical health (J = 2, K = 3)",
"Psychiatric hospitalization (J = 1, K = 1)",
"Employment (J = 1, K = 2)"
)
label_cat_hist_ridge(
data = n_es_by_construct,
n_es = effects,
variable = analysis_plan,
label_map = out_label,
level_order = out_level
) +
expand_limits(x = 20) +
labs(title = "Reintegrational outcomes") +
theme(plot.title = element_text(hjust = 0.5))
```Show the code
```{r outcome-construct-ridge-hist-mental}
#| label: fig-outcome-construct-ridge-hist-mental
#| fig-cap: "Distribution of effect size estimates, by mental health outcome constructs."
#| fig.height: 8.5
#| fig.retina: 2
#| message: false
n_es_by_construct_mental <-
gb_dat |>
filter(str_detect(outcome_construct, "Men")) |>
summarise(effects = n(), .by = c(study, analysis_plan)) |>
mutate(J = n(), .by = c(analysis_plan)) |>
arrange(desc(J))
# Used to construct out_label_mental
#label_dat_mental <-
# n_es_by_construct_mental |>
# summarise(J = n(), N_es = sum(effects), .by = analysis_plan)
out_label_mental <- c(
"General mental health (J = 28, K = 70)" = "General mental health",
"Depression (J = 19, K = 36)" = "Depression",
"Anxiety (J = 9, K = 14)" = "Anxiety",
"Symptoms of psychosis (J = 7, K = 21)" = "Symptoms of psychosis"
)
out_level_mental <- c(
"General mental health (J = 28, K = 70)",
"Depression (J = 19, K = 36)",
"Anxiety (J = 9, K = 14)",
"Symptoms of psychosis (J = 7, K = 21)"
)
label_cat_hist_ridge(
data = n_es_by_construct_mental,
n_es = effects,
variable = analysis_plan,
label_map = out_label_mental,
level_order = out_level_mental
) +
expand_limits(x = 15) +
labs(title = "Mental heath outcomes") +
theme(plot.title = element_text(hjust = 0.5))
```Primary study sample size
Total sample sizes
Show the code
```{r sample-size-overall-reint}
#| tbl-cap: "Distribution of primary study sample sizes at post test for reintegrational outcomes"
#| tbl-cap-location: top
#| label: tbl-sample-size
# Used when describing the treatment group sample sizes
N_t_stud_trtid <-
reintegation_dat |>
reframe(N_treat = max(N_t), .by = c(study, trt_id))
N_t_total <-
N_t_stud_trtid |>
summarise(N_t_total = sum(N_treat), .by = study)
N_c_total <-
reintegation_dat |>
summarise(N_c_total = max(N_c), .by = study)
N_total_dat <-
left_join(N_t_total, N_c_total, by = join_by(study)) |>
mutate(N_total = N_t_total + N_c_total)
primary_sample_size_descriptive <-
N_total_dat$N_total |>
skim() |>
select(-skim_type, -skim_variable, -n_missing, -complete_rate, -numeric.hist) |>
rename_at(vars(starts_with("numeric.")), ~ str_remove(., "numeric\\."))
primary_sample_size_descriptive |>
knitr::kable(
digits = 2,
booktabs = TRUE
) |>
kable_styling(bootstrap_options = c("striped","condensed"), full_width = FALSE)
```| mean | sd | p0 | p25 | p50 | p75 | p100 |
|---|---|---|---|---|---|---|
| 119.78 | 127.69 | 17 | 41 | 61 | 137 | 631 |
Show the code
```{r sample-size-overall-mental}
#| tbl-cap: "Distribution of primary study sample sizes at post test for mental health outcomes"
#| tbl-cap-location: top
#| label: tbl-sample-size-mental
# Used when describing the treatment group sample sizes
N_t_stud_trtid_mental <-
mental_health_dat |>
reframe(N_treat = max(N_t), .by = c(study, trt_id))
N_t_total_mental <-
N_t_stud_trtid_mental |>
summarise(N_t_total = sum(N_treat), .by = study)
N_c_total_mental <-
mental_health_dat |>
summarise(N_c_total = max(N_c), .by = study)
N_total_dat_mental <-
left_join(N_t_total_mental, N_c_total_mental, by = join_by(study)) |>
mutate(N_total = N_t_total + N_c_total)
primary_sample_size_descriptive_mental <-
N_total_dat_mental$N_total |>
skim() |>
select(-skim_type, -skim_variable, -n_missing, -complete_rate, -numeric.hist) |>
rename_at(vars(starts_with("numeric.")), ~ str_remove(., "numeric\\."))
primary_sample_size_descriptive_mental |>
knitr::kable(
digits = 2,
booktabs = TRUE
) |>
kable_styling(bootstrap_options = c("striped","condensed"), full_width = FALSE)
```| mean | sd | p0 | p25 | p50 | p75 | p100 |
|---|---|---|---|---|---|---|
| 113.73 | 125.6 | 17 | 40 | 61 | 128 | 631 |
The following plot displays the distribution of study sample sizes at post-test.
Show the code
```{r sample-size-plot-reint}
#| label: fig-sample-size-reint
#| fig-cap: "Distribution of primary study sample sizes at post test for reintegrational outcomes."
#| fig.height: 2.5
#| fig.width: 8
#| fig.retina: 2
#| message: false
study_sizes_plot_reint <-
ggplot(N_total_dat, aes(N_total)) +
geom_density(fill = "cornflowerblue", alpha = 0.8) +
geom_blank(aes(x = 0, y = 0)) +
geom_rug(alpha = 0.8) +
scale_y_continuous(NULL, breaks = NULL) +
theme_minimal() +
labs(x = "Total Sample Size", y = "")
study_sizes_plot_reint
```Show the code
```{r sample-size-plot-mental}
#| label: fig-sample-size-mental
#| fig-cap: "Distribution of primary study sample sizes at post test for mental health outcomes."
#| fig.height: 4
#| fig.retina: 2
#| message: false
study_sizes_plot_mental <-
ggplot(N_total_dat_mental, aes(N_total)) +
geom_density(fill = "gray", alpha = 0.8) +
geom_blank(aes(x = 0, y = 0)) +
geom_rug(alpha = 0.8) +
scale_y_continuous(NULL, breaks = NULL) +
theme_minimal() +
labs(x = "Total Sample Size", y = "")
study_sizes_plot_mental
```Treatment group
Show the code
```{r sample-size-treatment-reint}
#| tbl-cap: "Distribution of treatment sample sizes at post test for reintegrational outcomes"
#| tbl-cap-location: top
#| label: tbl-sample-size-treatment
treatment_sample_size_descriptive <-
N_t_stud_trtid$N_treat |>
skim() |>
select(-skim_type, -skim_variable, -n_missing, -complete_rate, -numeric.hist) |>
rename_at(vars(starts_with("numeric.")), ~ str_remove(., "numeric\\."))
treatment_sample_size_descriptive |>
knitr::kable(
digits = 2,
booktabs = TRUE
) |>
kable_styling(bootstrap_options = c("striped","condensed"), full_width = FALSE)
```| mean | sd | p0 | p25 | p50 | p75 | p100 |
|---|---|---|---|---|---|---|
| 60.88 | 60.32 | 8 | 22.75 | 33.5 | 90.25 | 315 |
Show the code
```{r sample-size-treatment-mental}
#| tbl-cap: "Distribution of treatment sample sizes at post test for mental health outcomes"
#| tbl-cap-location: top
#| label: tbl-sample-size-treatment-mental
treatment_sample_size_descriptive_mental <-
N_t_stud_trtid_mental$N_treat |>
skim() |>
select(-skim_type, -skim_variable, -n_missing, -complete_rate, -numeric.hist) |>
rename_at(vars(starts_with("numeric.")), ~ str_remove(., "numeric\\."))
treatment_sample_size_descriptive_mental |>
knitr::kable(
digits = 2,
booktabs = TRUE
) |>
kable_styling(bootstrap_options = c("striped","condensed"), full_width = FALSE)
```| mean | sd | p0 | p25 | p50 | p75 | p100 |
|---|---|---|---|---|---|---|
| 57.8 | 59.09 | 8 | 21 | 30 | 75 | 315 |
The following plot displays the distribution of treatment sample sizes at post-test.
Show the code
```{r sample-size-treatment-plot-reint}
#| label: fig-sample-size-treatment-reint
#| fig-cap: "Distribution of treatment sample sizes at post test for reintegrational outcomes."
#| fig.height: 2.5
#| fig.width: 8
#| fig.retina: 2
#| message: false
treatment_sizes_plot_reint <-
ggplot(N_t_stud_trtid, aes(N_treat)) +
geom_density(fill = "cornflowerblue", alpha = 0.8) +
geom_blank(aes(x = 0, y = 0)) +
geom_rug(alpha = 0.8) +
scale_y_continuous(NULL, breaks = NULL) +
theme_minimal() +
labs(x = "Total Treatment Sample Size", y = "")
treatment_sizes_plot_reint
```Show the code
```{r sample-size-treatment-plot-mental}
#| label: fig-sample-size-treatment-mental
#| fig-cap: "Distribution of treatment sample sizes at post test for mental health outcomes."
#| fig.height: 4
#| fig.retina: 2
#| message: false
treatment_sizes_plot_mental <-
ggplot(N_t_stud_trtid_mental, aes(N_treat)) +
geom_density(fill = "gray", alpha = 0.8) +
geom_blank(aes(x = 0, y = 0)) +
geom_rug(alpha = 0.8) +
scale_y_continuous(NULL, breaks = NULL) +
theme_minimal() +
labs(x = "Total Treatment Sample Size", y = "")
treatment_sizes_plot_mental
```Control group
Show the code
```{r sample-size-control-reint}
#| tbl-cap: "Distribution of control group sample sizes at post test for reintegrational outcomes"
#| tbl-cap-location: top
#| label: tbl-sample-size-control
control_sample_size_descriptive <-
N_total_dat$N_c_total |>
skim() |>
select(-skim_type, -skim_variable, -n_missing, -complete_rate, -numeric.hist) |>
rename_at(vars(starts_with("numeric.")), ~ str_remove(., "numeric\\."))
control_sample_size_descriptive |>
knitr::kable(
digits = 2,
booktabs = TRUE
) |>
kable_styling(bootstrap_options = c("striped","condensed"), full_width = FALSE)
```| mean | sd | p0 | p25 | p50 | p75 | p100 |
|---|---|---|---|---|---|---|
| 54.84 | 60.5 | 9 | 19 | 30 | 63 | 316 |
Show the code
```{r sample-size-control-mental}
#| tbl-cap: "Distribution of control group sample sizes at post test for mental health outcomes"
#| tbl-cap-location: top
#| label: tbl-sample-size-control-mental
control_sample_size_descriptive_mental <-
N_total_dat_mental$N_c_total |>
skim() |>
select(-skim_type, -skim_variable, -n_missing, -complete_rate, -numeric.hist) |>
rename_at(vars(starts_with("numeric.")), ~ str_remove(., "numeric\\."))
control_sample_size_descriptive_mental |>
knitr::kable(
digits = 2,
booktabs = TRUE
) |>
kable_styling(bootstrap_options = c("striped","condensed"), full_width = FALSE)
```| mean | sd | p0 | p25 | p50 | p75 | p100 |
|---|---|---|---|---|---|---|
| 51.71 | 58.61 | 9 | 20 | 29 | 63 | 316 |
The following plot displays the distribution of control sample sizes at post-test.
Show the code
```{r sample-size-control-plot-reint}
#| label: fig-sample-size-control-reint
#| fig-cap: "Distribution of control group sample sizes at post test for reintegrational outcomes."
#| fig.height: 2.5
#| fig.width: 8
#| fig.retina: 2
#| message: false
control_sizes_plot_reint <-
ggplot(N_total_dat, aes(N_c_total)) +
geom_density(fill = "cornflowerblue", alpha = 0.8) +
geom_blank(aes(x = 0, y = 0)) +
geom_rug(alpha = 0.8) +
scale_y_continuous(NULL, breaks = NULL) +
theme_minimal() +
labs(x = "Total Control Group Sample Size", y = "")
control_sizes_plot_reint
```Show the code
```{r sample-size-control-plot-mental}
#| label: fig-sample-size-control-mental
#| fig-cap: "Distribution of control group sample sizes at post test for mental health outcomes."
#| fig.height: 4
#| fig.retina: 2
#| message: false
control_sizes_plot_mental <-
ggplot(N_total_dat_mental, aes(N_c_total)) +
geom_density(fill = "gray", alpha = 0.8) +
geom_blank(aes(x = 0, y = 0)) +
geom_rug(alpha = 0.8) +
scale_y_continuous(NULL, breaks = NULL) +
theme_minimal() +
labs(x = "Total Control Group Sample Size", y = "")
control_sizes_plot_mental
```Study sample sizes versus number of effect size estimates per study
Show the code
```{r bivariate-es-plot}
#| label: fig-es-distribution-bivariate
#| fig-cap: "Study sample sizes versus number of effect size estimates for reintegrational outcomes"
#| fig.width: 6
#| fig.height: 4
#| fig.retina: 2
#| message: false
plot <-
reintegation_dat |>
summarise(effects = n(), .by = study) |>
left_join(N_total_dat, by = join_by(study)) |>
relocate(effects, .after = N_total) |>
ggplot(aes(x = N_total, y = effects)) +
geom_point(alpha = 0.5) +
scale_x_continuous(breaks = seq(0, 650, by = 50)) +
guides(size = "none") +
theme_minimal() +
theme(
legend.position = "inside",
legend.position.inside = c(0.9, 0.05),
legend.justification = c(1, 0),
legend.background = element_blank()
) +
labs(x = "Total sample size", y = "Number of effect size estimates per study", color = "") +
expand_limits(y = 30)
ggMarginal(plot, type = "density")
```Moderators
Show the code
```{r cross-tab-function}
cat_dat_cross <- function(variable, study_id, data) {
require(dplyr)
require(rlang)
require(tidyr)
var_exp <- enquo(variable)
study_id_exp <- enquo(study_id)
study_id_name <- as_name(study_id_exp)
res_dat <- data %>%
group_by(!!study_id_exp) %>%
reframe(var_exp_mirror = unique(!!var_exp)) %>%
full_join(data,
by = c(study_id_name),
relationship = "many-to-many") %>%
group_by(!!var_exp, var_exp_mirror) %>%
reframe(
m = n_distinct(!!study_id_exp),
k = n()
) %>%
mutate(size = paste0(m, " (", k, ")")) %>%
select(-m, -k) |>
pivot_wider(names_from = var_exp_mirror, values_from = "size")
names(res_dat)[1] <- "level"
res_dat <-
res_dat |>
mutate(
level = factor(level, levels = unique(names(res_dat[-1])))
) |>
arrange(level)
return(res_dat)
}
```Categorical moderators
Outcome measure
Show the code
```{r outcome-dependency-table-reint}
#| tbl-cap: "Dependency table for preregistration status (reintegration)"
#| tbl-cap-location: top
#| label: tbl-outcome
outcome_dat_cross <- cat_dat_cross(
data = reintegation_dat,
variable = analysis_plan,
study_id = study
)
outcome_dat_cross |>
knitr::kable(
"html",
col.names = c(
"Outcome",
colnames(outcome_dat_cross)[-1]
)
) |>
kableExtra::column_spec(1, bold = TRUE) |>
kableExtra::footnote(
general = "Values outside the parentheses are number of studies, with the number of samples and effect size estimates shown in the parentheses.",
general_title = "Note: ",
footnote_as_chunk = T
) |>
kableExtra::kable_styling(bootstrap_options = c("striped", "condensed"), full_width = T)
```| Outcome | Alcohol and drug abuse/misuse | Hope, empowerment & self-efficacy | Physical health | Social functioning (degree of impairment) | Wellbeing and quality of life | Employment | Self-esteem | Loneliness | Psychiatric hospitalization |
|---|---|---|---|---|---|---|---|---|---|
| Alcohol and drug abuse/misuse | 7 (31) | 1 (2) | 1 (1) | 3 (4) | 2 (3) | - | - | - | - |
| Hope, empowerment & self-efficacy | 1 (1) | 12 (32) | - | 1 (2) | 6 (14) | 1 (6) | 3 (15) | 1 (4) | 1 (1) |
| Physical health | 1 (1) | - | 2 (3) | 2 (3) | - | - | - | - | - |
| Social functioning (degree of impairment) | 3 (7) | 1 (2) | 2 (5) | 16 (47) | 7 (30) | - | - | - | - |
| Wellbeing and quality of life | 2 (3) | 6 (12) | - | 7 (34) | 24 (67) | - | 2 (2) | 2 (3) | - |
| Employment | - | 1 (2) | - | - | - | 1 (2) | 1 (2) | - | - |
| Self-esteem | - | 3 (5) | - | - | 2 (2) | 1 (2) | 5 (14) | - | - |
| Loneliness | - | 1 (2) | - | - | 2 (3) | - | - | 4 (5) | - |
| Psychiatric hospitalization | - | 1 (1) | - | - | - | - | - | - | 1 (1) |
| Note: Values outside the parentheses are number of studies, with the number of samples and effect size estimates shown in the parentheses. |
Show the code
```{r outcome-subgroup-dependency-table-reint}
#| tbl-cap: "Dependency table for outcome used for subgroup analysis (reintegration)"
#| tbl-cap-location: top
#| label: tbl-outcome-subgroup
outcome_subgroup_dat_cross <- cat_dat_cross(
data = filter(reintegation_dat, str_detect(analysis_plan, "Alco|Hope|Social|Well")),
variable = analysis_plan,
study_id = study
)
outcome_subgroup_dat_cross |>
knitr::kable(
"html",
col.names = c(
"Outcome",
colnames(outcome_subgroup_dat_cross)[-1]
)
) |>
kableExtra::column_spec(1, bold = TRUE) |>
kableExtra::footnote(
general = "Values outside the parentheses are number of studies, with the number of samples and effect size estimates shown in the parentheses.",
general_title = "Note: ",
footnote_as_chunk = T
) |>
kableExtra::kable_styling(bootstrap_options = c("striped", "condensed"), full_width = T)
```| Outcome | Alcohol and drug abuse/misuse | Hope, empowerment & self-efficacy | Social functioning (degree of impairment) | Wellbeing and quality of life |
|---|---|---|---|---|
| Alcohol and drug abuse/misuse | 7 (31) | 1 (2) | 3 (4) | 2 (3) |
| Hope, empowerment & self-efficacy | 1 (1) | 12 (32) | 1 (2) | 6 (14) |
| Social functioning (degree of impairment) | 3 (7) | 1 (2) | 16 (47) | 7 (30) |
| Wellbeing and quality of life | 2 (3) | 6 (12) | 7 (34) | 24 (67) |
| Note: Values outside the parentheses are number of studies, with the number of samples and effect size estimates shown in the parentheses. |
Show the code
```{r outcome-subgroup-dependency-table-mental}
#| tbl-cap: "Dependency table for outcome used for subgroup analysis (mental health)"
#| tbl-cap-location: top
#| label: tbl-outcome-subgroup-mental
outcome_subgroup_dat_cross_mental <- cat_dat_cross(
data = mental_health_dat,
variable = analysis_plan,
study_id = study
)
outcome_subgroup_dat_cross_mental |>
knitr::kable(
"html",
col.names = c(
"Outcome",
colnames(outcome_subgroup_dat_cross_mental)[-1]
)
) |>
kableExtra::column_spec(1, bold = TRUE) |>
kableExtra::footnote(
general = "Values outside the parentheses are number of studies, with the number of samples and effect size estimates shown in the parentheses.",
general_title = "Note: ",
footnote_as_chunk = T
) |>
kableExtra::kable_styling(bootstrap_options = c("striped", "condensed"), full_width = T)
```| Outcome | Anxiety | Depression | General mental health | Symptoms of psychosis |
|---|---|---|---|---|
| Anxiety | 9 (14) | 7 (11) | 5 (9) | - |
| Depression | 7 (10) | 19 (36) | 10 (21) | 2 (4) |
| General mental health | 5 (13) | 10 (27) | 28 (70) | 2 (3) |
| Symptoms of psychosis | - | 2 (8) | 2 (3) | 7 (21) |
| Note: Values outside the parentheses are number of studies, with the number of samples and effect size estimates shown in the parentheses. |
Ridge plot of effect size estimates
Show the code
```{r cat-ridge-function}
cat_ridge <- function(data, es, v, variable) {
require(dplyr)
require(rlang)
require(tidyr)
require(ggplot2)
es_exp <- enquo(es)
var_exp <- enquo(variable)
v_exp <- enquo(v)
data |>
mutate(!!var_exp := fct_rev(!!var_exp)) |>
ggplot(aes(
x = !!es_exp,
y = !!var_exp,
fill = !!var_exp
)) +
geom_density_ridges(
aes(
point_colour = !!var_exp,
point_size = 1 / !!v_exp
),
alpha = .2,
point_alpha = 0.5,
jittered_points = TRUE
) +
theme_minimal() +
labs(y = "", x = "Standardized Mean Difference (Hedges' g)") +
theme(legend.position = "none")
}
```Show the code
```{r type-ridge-reint-analyzed}
#| label: fig-type-ridge-reint-analyzed
#| fig-cap: "Distribution of effect size estimates, by reintegrational outcomes"
#| fig.width: 6
#| fig.height: 4
#| fig.retina: 2
#| message: false
analyzed_outcomes <-
reintegation_dat |>
filter(str_detect(analysis_plan, "Alco|Hope|Social|Well"))
cat_ridge(data = analyzed_outcomes, es = gt_pop, variable = analysis_plan, v = vgt_pop)
```Show the code
```{r type-ridge-reint-not-analyzed}
#| label: fig-type-ridge-reint-not-analyzed
#| fig-cap: "Distribution of effect size estimates, by reintegrational outcomes."
#| fig.width: 6
#| fig.height: 4
#| fig.retina: 2
#| message: false
not_analyzed_outcomes <-
reintegation_dat |>
filter(!str_detect(analysis_plan, "Alco|Hope|Social|Well"))
cat_ridge(data = not_analyzed_outcomes, es = gt_pop, variable = analysis_plan, v = vgt_pop)
```Show the code
```{r type-ridge-mental-analyzed}
#| label: fig-type-ridge-mental-analyzed
#| fig-cap: "Distribution of effect size estimates, by mental health outcomes."
#| fig.height: 7
#| fig.retina: 2
#| message: false
cat_ridge(data = mental_health_dat, es = gt_pop, variable = analysis_plan, v = vgt_pop)
```Network plot for outcome construct
The following plot shows the network structure of outcomes constructs. Each node represent an outcome construct, the edge between a pair of nodes indicates that there is at least one study that examined the contracts between that pair of constructs The width of the edges indicates the number of studies that compare that pair of constructs. The size of the node corresponds to the number of studies measure that construct.
Show the code
```{r network-plot}
#| label: fig-network
#| fig-cap: "Network structure of contrasts between primary and secondary outcome constructs"
#| fig.width: 7
#| fig.height: 6
#| fig.retina: 2
#| message: false
gb_dat_reduced <- gb_dat |> select(study, analysis_plan)
res_dat <- gb_dat_reduced |>
group_by(study) |>
reframe(var_exp_mirror = unique(analysis_plan)) |>
full_join(gb_dat_reduced ,
by = join_by(study),
relationship = "many-to-many") |>
group_by(analysis_plan, var_exp_mirror) |>
reframe(
m = n_distinct(study),
k = n()
) |>
mutate(size = m) |>
select(-m, -k) |>
arrange(var_exp_mirror) |>
pivot_wider(names_from = var_exp_mirror, values_from = "size") |>
arrange(analysis_plan) |>
as.data.frame()
names(res_dat)[1] <- "level"
edges <- res_dat |>
rename(from = "level") |>
pivot_longer(-from, names_to = "to", values_to = "weight") |>
filter(from != to, !is.na(weight)) |>
mutate(
from_chr = as.character(from),
to_chr = as.character(to),
grp_str = paste0(pmin(from_chr, to_chr, na.rm = TRUE), "_", pmax(from_chr, to_chr, na.rm = TRUE))
) |>
distinct(grp_str, .keep_all = TRUE) |>
select(from, to, weight)
g <- graph_from_data_frame(edges, directed = FALSE)
layout <- layout_in_circle(g)
# Adjust label position outward
label_coords <- layout
label_coords[, 1] <- c(
label_coords[1, 1] * 1.35, #1.5,
label_coords[2:6, 1] * 1.5, #1.63,
label_coords[7, 1] * 1.35, #1.68,
label_coords[8:13, 1] * 1.4 #1.63
)
label_coords[, 2] <- c(
label_coords[c(1:3), 2],
label_coords[4, 2] * 1.13,
label_coords[5, 2] * 1.3,
label_coords[6, 2] * 1.13,
label_coords[c(7:9), 2] * 1.13,
label_coords[10, 2] * 1.3,
label_coords[11, 2] * 1.3,
label_coords[12, 2] * 1.3,
label_coords[13, 2] * 1.13
)
node_sizes <- diag(as.matrix(res_dat[, -1]))
plot(
g,
layout = layout,
edge.width = E(g)$weight,
edge.color = met.brewer("Navajo")[5],
vertex.size = node_sizes[c(1:8, 10:13, 9)],
vertex.label = NA,
vertex.color = met.brewer("Navajo")[4],
vertex.frame.width = 0
)
text(
x = label_coords[, 1],
y = label_coords[, 2],
labels = paste0(str_wrap(names(res_dat[c(2:9, 11:14, 10)]), width = 15), "\n(J = ", node_sizes, ")"),
cex = 0.6,
col = "black",
xpd = NA
)
```Diagnosis (schizophrenia vs. rest of the effects)
Show the code
```{r diagnosis-dependency-table-reint}
#| tbl-cap: "Dependency table for diagnosis (reintegration)"
#| tbl-cap-location: top
#| label: tbl-diagnosis-subgroup-reint
diagnosis_subgroup_dat_cross <- cat_dat_cross(
data = reintegation_dat,
variable = schizophrenia,
study_id = study
)
diagnosis_subgroup_dat_cross |>
knitr::kable(
"html",
col.names = c(
"Diagnosis",
colnames(diagnosis_subgroup_dat_cross)[-1]
)
) |>
kableExtra::column_spec(1, bold = TRUE) |>
kableExtra::footnote(
general = "Values outside the parentheses are number of studies, with the number of samples and effect size estimates shown in the parentheses.",
general_title = "Note: ",
footnote_as_chunk = T
) |>
kableExtra::kable_styling(bootstrap_options = c("striped", "condensed"), full_width = T)
```| Diagnosis | Other | Schizophrenia |
|---|---|---|
| Other | 37 (172) | - |
| Schizophrenia | - | 8 (30) |
| Note: Values outside the parentheses are number of studies, with the number of samples and effect size estimates shown in the parentheses. |
Show the code
```{r diagnosis-dependency-table-mental}
#| tbl-cap: "Dependency table for diagnosis (mental health)"
#| tbl-cap-location: top
#| label: tbl-diagnosis-subgroup-mental
diagnosis_subgroup_dat_cross_mental <- cat_dat_cross(
data = mental_health_dat,
variable = schizophrenia,
study_id = study
)
diagnosis_subgroup_dat_cross_mental |>
knitr::kable(
"html",
col.names = c(
"Diagnosis",
colnames(diagnosis_subgroup_dat_cross_mental)[-1]
)
) |>
kableExtra::column_spec(1, bold = TRUE) |>
kableExtra::footnote(
general = "Values outside the parentheses are number of studies, with the number of samples and effect size estimates shown in the parentheses.",
general_title = "Note: ",
footnote_as_chunk = T
) |>
kableExtra::kable_styling(bootstrap_options = c("striped", "condensed"), full_width = T)
```| Diagnosis | Other | Schizophrenia |
|---|---|---|
| Other | 35 (130) | - |
| Schizophrenia | - | 6 (11) |
| Note: Values outside the parentheses are number of studies, with the number of samples and effect size estimates shown in the parentheses. |
Show the code
```{r diagnosis-ridge-reint}
#| label: fig-diagnosis-ridge-reint
#| fig-cap: "Distribution of effect size estimates, by diagnosis (reintegrational outcome)."
#| fig.width: 6
#| fig.height: 4
#| fig.retina: 2
#| message: false
cat_ridge(data = reintegation_dat, es = gt_pop, variable = schizophrenia, v = vgt_pop)
```Show the code
```{r type-ridge-mental}
#| label: fig-type-ridge-mental
#| fig-cap: "Distribution of effect size estimates, by diagnosis (mental health)."
#| fig.height: 6.5
#| fig.retina: 2
#| message: false
cat_ridge(data = mental_health_dat, es = gt_pop, variable = schizophrenia, v = vgt_pop)
```Type of intervention
Show the code
```{r cbt-dependency-table-reint}
#| tbl-cap: "Dependency table for type of intervention (reintegration)"
#| tbl-cap-location: top
#| label: tbl-cbt-subgroup
cbt_subgroup_dat_cross <- cat_dat_cross(
data = reintegation_dat,
variable = CBT_int,
study_id = study
)
cbt_subgroup_dat_cross |>
knitr::kable(
"html",
col.names = c(
"Intervention",
colnames(cbt_subgroup_dat_cross)[-1]
)
) |>
kableExtra::column_spec(1, bold = TRUE) |>
kableExtra::footnote(
general = "Values outside the parentheses are number of studies, with the number of samples and effect size estimates shown in the parentheses.",
general_title = "Note: ",
footnote_as_chunk = T
) |>
kableExtra::kable_styling(bootstrap_options = c("striped", "condensed"), full_width = T)
```| Intervention | CBT | Other |
|---|---|---|
| CBT | 11 (52) | 1 (5) |
| Other | 1 (5) | 35 (150) |
| Note: Values outside the parentheses are number of studies, with the number of samples and effect size estimates shown in the parentheses. |
Show the code
```{r cbt-dependency-table-mental}
#| tbl-cap: "Dependency table for type of intervention (mental health)"
#| tbl-cap-location: top
#| label: tbl-cbt-subgroup-mental
cbt_subgroup_dat_cross_mental <- cat_dat_cross(
data = mental_health_dat,
variable = CBT_int,
study_id = study
)
cbt_subgroup_dat_cross_mental |>
knitr::kable(
"html",
col.names = c(
"Intervention",
colnames(cbt_subgroup_dat_cross_mental)[-1]
)
) |>
kableExtra::column_spec(1, bold = TRUE) |>
kableExtra::footnote(
general = "Values outside the parentheses are number of studies, with the number of samples and effect size estimates shown in the parentheses.",
general_title = "Note: ",
footnote_as_chunk = T
) |>
kableExtra::kable_styling(bootstrap_options = c("striped", "condensed"), full_width = T)
```| Intervention | CBT | Other |
|---|---|---|
| CBT | 11 (46) | 1 (2) |
| Other | 1 (2) | 31 (95) |
| Note: Values outside the parentheses are number of studies, with the number of samples and effect size estimates shown in the parentheses. |
Show the code
```{r cbt-ridge-reint}
#| label: fig-cbt-ridge-reint
#| fig-cap: "Distribution of effect size estimates, by type of intervention (reintegrational outcome)."
#| fig.width: 6
#| fig.height: 4
#| fig.retina: 2
#| message: false
cat_ridge(data = reintegation_dat, es = gt_pop, variable = CBT_int, v = vgt_pop)
```Show the code
```{r cbt-ridge-mental}
#| label: fig-cbt-ridge-mental
#| fig-cap: "Distribution of effect size estimates, by type of intervention (mental health)."
#| fig.height: 6.5
#| fig.retina: 2
#| message: false
cat_ridge(data = mental_health_dat, es = gt_pop, variable = CBT_int, v = vgt_pop)
```EGM-like plot
Show the code
```{r egm-reint}
#| label: fig-egm-reint
#| fig-cap: "EGM for reintegrational outcomes"
#| fig.width: 18
#| fig.height: 18
#| fig.retina: 2
#| message: false
egm_dat_reint <-
reintegation_dat |>
summarise(
n = n(),
n_studies = factor(n_distinct(study), levels = c(1:4)),
.by = c(trt_group, analysis_plan, prereg_chr)
) |>
mutate(
n_prereg = case_match(
prereg_chr,
"Preregistered" ~ 0.5,
"Not preregistered" ~ 0
),
constant = "Intervention",
outcome = case_match(
analysis_plan,
"Alcohol and drug abuse/misuse" ~ "Alcohol/drugs",
"Hope, empowerment & self-efficacy" ~ "Hope",
"Psychiatric hospitalization" ~ "Psych hospital",
"Social functioning (degree of impairment)" ~ "Social func",
"Wellbeing and quality of life" ~ "Wellbeing/QoL",
.default = analysis_plan
),
intervention = case_match(
trt_group,
"group-based CBT" ~ "GrpCBT",
"stress management" ~ "StressMan",
"vocational training" ~ "JobTrain",
"group psychotherapy" ~ "GrpPsychT",
"art therapy" ~ "ArtT",
"illness management" ~ "IllMan",
"group psychoeducation" ~ "GrpPsychEdu",
"seeking safety" ~ "SeekSafe",
"social cognition and interaction training" ~ "SCIT",
"illness and addiction management" ~ "Ill&AddMan",
"social network training" ~ "NetworkTrain",
"cognitive-behavioral social skills training" ~ "CBSST",
"residential treatment" ~ "ResidentTreat",
"positive psychology group intervention" ~ "PosiPsychGrp",
"addiction management" ~ "AddMan",
"reading group intervention" ~ "ReadGrp"
)
#intervention_name = case_match(
# intervention,
# "Sanctions and economic incentives" ~ "Econ incentives",
# "Introduction programmes" ~ "Intro program",
# "Combination programmes" ~ "Combi program",
# "Language training" ~ "Lang train",
# "Labour market training" ~ "Lab market train",
# "Job search assistance" ~" Job search ass",
# "Subsidized public sector employment" ~ "Sub public emp"
#),
#
#outcome = if_else(outcome == "Duration of social assistance spells", "Dur. social ass spells", outcome)
)
egm_dat_reint |>
ggplot(aes(x = n_prereg, y = constant, size = n, color = n_studies)) +
geom_point() +
scale_size(range = c(6, 14)) +
geom_text(aes(label = n), color = "black", size = 3.5) +
scale_x_continuous(breaks = seq(0,0.5,0.5), limits = c(0, 1), labels = c("Conventional", "Preregistered")) +
scale_y_discrete("Interventions") +
facet_grid(intervention~outcome, scales = "free_y", space = "free_y") +
theme_bw() +
theme(
legend.position = "bottom",
axis.text.x = element_text(angle = 45, hjust = 1),
#panel.grid.major = element_blank(),
#panel.grid.minor = element_blank(),
#panel.background = element_blank(),
axis.text.y = element_blank(),
axis.ticks.y = element_blank(),
axis.title.y = element_blank(),
plot.caption = element_text(hjust = 0, size = 14)
) +
coord_cartesian(xlim = c(-0.25, 0.75), ylim = NULL) +
guides(size = "none") +
xlab("Type of registration") +
labs(
color = "Number of studies",
caption = paste0(
"Note: GrpCBT = Group-based CBT, StressMan = Stress mangement, JobTrain = Vocational training, ",
"GrpPsychT = Group psychotherapy, ArtT = Art Therapy, IllMan = Ill management,\n",
"GrpPsychEdu = Group Psychoeducation, SeekSafe = Seeking safety, ",
"SCIT = cognitive-behavioral social skills training, ResidentTreat = Residential treatment,\n",
"PosiPsychGrp = Positive Psychology group therapy, AddMan = Addiction mangement, ",
"ReadGrp = Reading group."
)
)
```Show the code
```{r egm-mental}
#| label: fig-egm-mental
#| fig-cap: "EGM for mental health outcomes"
#| fig.width: 18
#| fig.height: 18
#| fig.retina: 2
#| message: false
egm_dat_mental <-
mental_health_dat |>
summarise(
n = n(),
n_studies = factor(n_distinct(study), levels = c(1:4)),
.by = c(trt_group, analysis_plan, prereg_chr)
) |>
mutate(
n_prereg = case_match(
prereg_chr,
"Preregistered" ~ 0.5,
"Not preregistered" ~ 0
),
constant = "Intervention",
outcome = analysis_plan,
intervention = case_match(
trt_group,
"group-based CBT" ~ "GrpCBT",
"stress management" ~ "StressMan",
"vocational training" ~ "JobTrain",
"group psychotherapy" ~ "GrpPsychT",
"art therapy" ~ "ArtT",
"illness management" ~ "IllMan",
"group psychoeducation" ~ "GrpPsychEdu",
"seeking safety" ~ "SeekSafe",
"social cognition and interaction training" ~ "SCIT",
"illness and addiction management" ~ "Ill&AddMan",
"social network training" ~ "NetworkTrain",
"cognitive-behavioral social skills training" ~ "CBSST",
"residential treatment" ~ "ResidentTreat",
"positive psychology group intervention" ~ "PosiPsychGrp",
"addiction management" ~ "AddMan",
"reading group intervention" ~ "ReadGrp",
"group psychoeducation & social skill training" ~ "GrpPsyEdu&SS"
)
#intervention_name = case_match(
# intervention,
# "Sanctions and economic incentives" ~ "Econ incentives",
# "Introduction programmes" ~ "Intro program",
# "Combination programmes" ~ "Combi program",
# "Language training" ~ "Lang train",
# "Labour market training" ~ "Lab market train",
# "Job search assistance" ~" Job search ass",
# "Subsidized public sector employment" ~ "Sub public emp"
#),
#
#outcome = if_else(outcome == "Duration of social assistance spells", "Dur. social ass spells", outcome)
)
egm_dat_mental |>
ggplot(aes(x = n_prereg, y = constant, size = n, color = n_studies)) +
geom_point() +
scale_size(range = c(6, 14)) +
geom_text(aes(label = n), color = "black", size = 3.5) +
scale_x_continuous(breaks = seq(0,0.5,0.5), limits = c(0, 1), labels = c("Conventional", "Preregistered")) +
scale_y_discrete("Interventions") +
facet_grid(intervention~outcome, scales = "free_y", space = "free_y") +
theme_bw() +
theme(
legend.position = "bottom",
axis.text.x = element_text(angle = 45, hjust = 1),
#panel.grid.major = element_blank(),
#panel.grid.minor = element_blank(),
#panel.background = element_blank(),
axis.text.y = element_blank(),
axis.ticks.y = element_blank(),
axis.title.y = element_blank(),
plot.caption = element_text(hjust = 0, size = 12)
) +
coord_cartesian(xlim = c(-0.25, 0.75), ylim = NULL) +
guides(size = "none") +
xlab("Type of registration") +
labs(
color = "Number of studies",
caption = paste0(
"Note: GrpCBT = Group-based CBT, StressMan = Stress mangement, JobTrain = Vocational training,",
"GrpPsychT = Group psychotherapy, ArtT = Art Therapy,\nIllMan = Ill management,",
"GrpPsychEdu = Group Psychoeducation, SeekSafe = Seeking safety,",
"SCIT = cognitive-behavioral social skills training,\nResidentTreat = Residential treatment,",
"PosiPsychGrp = Positive Psychology group therapy, AddMan = Addiction mangement, ",
"ReadGrp = Reading group,\nGrpPsyEdu&SS = Group psychoeducation & social skill training."
)
)
```Type of test
Show the code
```{r test-type-dependency-table-reint}
#| tbl-cap: "Dependency table for type of test (reintegration)"
#| tbl-cap-location: top
#| label: tbl-test-type-subgroup
test_type_dat <-
reintegation_dat |>
filter(test_type != "Raw events")
test_type_dat_cross <- cat_dat_cross(
data = test_type_dat,
variable = test_type,
study_id = study
)
test_type_dat_cross |>
knitr::kable(
"html",
col.names = c(
"Type of test",
colnames(test_type_dat_cross)[-1]
)
) |>
kableExtra::column_spec(1, bold = TRUE) |>
kableExtra::footnote(
general = "Values outside the parentheses are number of studies, with the number of samples and effect size estimates shown in the parentheses.",
general_title = "Note: ",
footnote_as_chunk = T
) |>
kableExtra::kable_styling(bootstrap_options = c("striped", "condensed"), full_width = T)
```| Type of test | Clinician-rated measure | Self-reported |
|---|---|---|
| Clinician-rated measure | 12 (36) | 5 (8) |
| Self-reported | 5 (8) | 38 (165) |
| Note: Values outside the parentheses are number of studies, with the number of samples and effect size estimates shown in the parentheses. |
Show the code
```{r test-type-dependency-table-mental}
#| tbl-cap: "Dependency table for type of test (mental health)"
#| tbl-cap-location: top
#| label: tbl-test-type-subgroup-mental
test_type_dat_mental <-
mental_health_dat |>
filter(test_type != "Raw events")
test_type_dat_cross_mental <- cat_dat_cross(
data = test_type_dat_mental,
variable = test_type,
study_id = study
)
test_type_dat_cross_mental |>
knitr::kable(
"html",
col.names = c(
"Type of test",
colnames(test_type_dat_cross_mental)[-1]
)
) |>
kableExtra::column_spec(1, bold = TRUE) |>
kableExtra::footnote(
general = "Values outside the parentheses are number of studies, with the number of samples and effect size estimates shown in the parentheses.",
general_title = "Note: ",
footnote_as_chunk = T
) |>
kableExtra::kable_styling(bootstrap_options = c("striped", "condensed"), full_width = T)
```| Type of test | Clinician-rated measure | Self-reported |
|---|---|---|
| Clinician-rated measure | 14 (41) | 5 (11) |
| Self-reported | 5 (18) | 32 (100) |
| Note: Values outside the parentheses are number of studies, with the number of samples and effect size estimates shown in the parentheses. |
Show the code
```{r test-type-ridge-reint}
#| label: fig-test-type-ridge-reint
#| fig-cap: "Distribution of effect size estimates, by type of test (reintegrational outcome)."
#| fig.width: 6
#| fig.height: 4
#| fig.retina: 2
#| message: false
cat_ridge(data = test_type_dat, es = gt_pop, variable = test_type, v = vgt_pop)
```Show the code
```{r test-type-ridge-mental}
#| label: fig-test-type-ridge-mental
#| fig-cap: "Distribution of effect size estimates, by type of test (mental health)."
#| fig.height: 6.2
#| fig.retina: 2
#| message: false
cat_ridge(data = test_type_dat_mental, es = gt_pop, variable = test_type, v = vgt_pop)
```Show the code
```{r es-pval-plot-reint}
#| label: fig-es-pval-reint
#| fig-cap: "Distributions of effect size by p values and outcome measure type."
#| fig.width: 9
#| fig.height: 6
#| fig.retina: 2
#| message: false
test_type_dat_all <-
gb_dat |>
filter(test_type != "Raw events") |>
mutate(
p_val = 2 * ( 1 - pnorm( abs(gt_pop) / sqrt(vgt_pop) ) ),
)
ggplot(test_type_dat_all, aes(y = gt_pop, x = p_val, color = test_type)) +
geom_point() +
geom_hline(yintercept = 0) +
geom_vline(xintercept = .05, color = "gray") +
facet_grid(outcome_construct~test_type) +
theme_bw() +
theme(legend.position="none") +
labs(x = "p values", y = "Effect sizes (Hedges' g)")
```ITT vs. TOT
Show the code
```{r strategy-dependency-table-reint}
#| tbl-cap: "Dependency table for estimation strategy (reintegration)"
#| tbl-cap-location: top
#| label: tbl-strategy-subgroup
strategy_subgroup_dat_cross <- cat_dat_cross(
data = reintegation_dat,
variable = analysis_strategy,
study_id = study
)
strategy_subgroup_dat_cross |>
knitr::kable(
"html",
col.names = c(
"Strategy",
colnames(strategy_subgroup_dat_cross)[-1]
)
) |>
kableExtra::column_spec(1, bold = TRUE) |>
kableExtra::footnote(
general = paste0("Values outside the parentheses are number of studies,", "
with the number of samples and effect size estimates shown in the parentheses. ",
"TOT = treatment on the treated, ITT = Intention to treat."
),
general_title = "Note: ",
footnote_as_chunk = T
) |>
kableExtra::kable_styling(bootstrap_options = c("striped", "condensed"), full_width = T)
```| Strategy | ITT | TOT |
|---|---|---|
| ITT | 22 (108) | - |
| TOT | - | 23 (94) |
| Note: Values outside the parentheses are number of studies, with the number of samples and effect size estimates shown in the parentheses. TOT = treatment on the treated, ITT = Intention to treat. |
Show the code
```{r strategy-dependency-table-mental}
#| tbl-cap: "Dependency table for estimation strategy (mental health)"
#| tbl-cap-location: top
#| label: tbl-strategy-subgroup-mental
strategy_subgroup_dat_cross_mental <- cat_dat_cross(
data = mental_health_dat,
variable = analysis_strategy,
study_id = study
)
strategy_subgroup_dat_cross_mental |>
knitr::kable(
"html",
col.names = c(
"Strategy",
colnames(strategy_subgroup_dat_cross_mental)[-1]
)
) |>
kableExtra::column_spec(1, bold = TRUE) |>
kableExtra::footnote(
general = paste0("Values outside the parentheses are number of studies,", "
with the number of samples and effect size estimates shown in the parentheses. ",
"TOT = treatment on the treated, ITT = Intention to treat."
),
general_title = "Note: ",
footnote_as_chunk = T
) |>
kableExtra::kable_styling(bootstrap_options = c("striped", "condensed"), full_width = T)
```| Strategy | ITT | TOT |
|---|---|---|
| ITT | 18 (69) | - |
| TOT | - | 23 (72) |
| Note: Values outside the parentheses are number of studies, with the number of samples and effect size estimates shown in the parentheses. TOT = treatment on the treated, ITT = Intention to treat. |
Show the code
```{r strategy-ridge-reint}
#| label: fig-strategy-ridge-reint
#| fig-cap: "Distribution of effect size estimates, by estiamtion strategy (reintegrational outcome)."
#| fig.width: 6
#| fig.height: 4
#| fig.retina: 2
#| message: false
cat_ridge(data = reintegation_dat, es = gt_pop, variable = analysis_strategy, v = vgt_pop)
```Show the code
```{r strategy-ridge-mental}
#| label: fig-strategy-ridge-mental
#| fig-cap: "Distribution of effect size estimates, by estiamtion strategy (mental health)."
#| fig.height: 6.5
#| fig.retina: 2
#| message: false
cat_ridge(data = mental_health_dat, es = gt_pop, variable = analysis_strategy, v = vgt_pop)
```RCT vs. QES
Show the code
```{r design-dependency-table-reint}
#| tbl-cap: "Dependency table for type of research design (reintegration)"
#| tbl-cap-location: top
#| label: tbl-design-subgroup
design_subgroup_dat_cross <- cat_dat_cross(
data = reintegation_dat,
variable = QES_design,
study_id = study
)
design_subgroup_dat_cross |>
knitr::kable(
"html",
col.names = c(
"Design",
colnames(design_subgroup_dat_cross)[-1]
)
) |>
kableExtra::column_spec(1, bold = TRUE) |>
kableExtra::footnote(
general = paste0("Values outside the parentheses are number of studies,", "
with the number of samples and effect size estimates shown in the parentheses."
),
general_title = "Note: ",
footnote_as_chunk = T
) |>
kableExtra::kable_styling(bootstrap_options = c("striped", "condensed"), full_width = T)
```| Design | QES | RCT |
|---|---|---|
| QES | 8 (18) | - |
| RCT | - | 37 (184) |
| Note: Values outside the parentheses are number of studies, with the number of samples and effect size estimates shown in the parentheses. |
Show the code
```{r design-dependency-table-mental}
#| tbl-cap: "Dependency table for type of research design (mental health)"
#| tbl-cap-location: top
#| label: tbl-design-subgroup-mental
design_subgroup_dat_cross_mental <- cat_dat_cross(
data = mental_health_dat,
variable = QES_design,
study_id = study
)
design_subgroup_dat_cross_mental |>
knitr::kable(
"html",
col.names = c(
"Design",
colnames(design_subgroup_dat_cross_mental)[-1]
)
) |>
kableExtra::column_spec(1, bold = TRUE) |>
kableExtra::footnote(
general = paste0("Values outside the parentheses are number of studies,", "
with the number of samples and effect size estimates shown in the parentheses."
),
general_title = "Note: ",
footnote_as_chunk = T
) |>
kableExtra::kable_styling(bootstrap_options = c("striped", "condensed"), full_width = T)
```| Design | QES | RCT |
|---|---|---|
| QES | 8 (17) | - |
| RCT | - | 33 (124) |
| Note: Values outside the parentheses are number of studies, with the number of samples and effect size estimates shown in the parentheses. |
Show the code
```{r design-ridge-reint}
#| label: fig-design-ridge-reint
#| fig-cap: "Distribution of effect size estimates, by research design (reintegrational outcome)."
#| fig.width: 6
#| fig.height: 4
#| fig.retina: 2
#| message: false
cat_ridge(data = reintegation_dat, es = gt_pop, variable = QES_design, v = vgt_pop)
```Show the code
```{r design-ridge-mental}
#| label: fig-design-ridge-mental
#| fig-cap: "Distribution of effect size estimates, by research design (mental health)."
#| fig.height: 6.5
#| fig.retina: 2
#| message: false
cat_ridge(data = mental_health_dat, es = gt_pop, variable = QES_design, v = vgt_pop)
```Type of control
Show the code
```{r control-dependency-table-reint}
#| tbl-cap: "Dependency table for type of control group (reintegration)"
#| tbl-cap-location: top
#| label: tbl-control-subgroup
control_subgroup_dat_cross <- cat_dat_cross(
data = reintegation_dat,
variable = control,
study_id = study
)
control_subgroup_dat_cross |>
knitr::kable(
"html",
col.names = c(
"Control",
colnames(control_subgroup_dat_cross)[-1]
)
) |>
kableExtra::column_spec(1, bold = TRUE) |>
kableExtra::footnote(
paste0(
"Values outside the parentheses are number of studies,", "
with the number of samples and effect size estimates shown in the parentheses."
),
general_title = "Note: ",
footnote_as_chunk = T
) |>
kableExtra::kable_styling(bootstrap_options = c("striped", "condensed"), full_width = T)
```| Control | Individual treatment | TAU | TAU with Waiting-list | Waiting-list only |
|---|---|---|---|---|
| Individual treatment | 3 (4) | - | - | - |
| TAU | - | 30 (154) | - | - |
| TAU with Waiting-list | - | - | 8 (31) | - |
| Waiting-list only | - | - | - | 4 (13) |
| Note: Values outside the parentheses are number of studies, with the number of samples and effect size estimates shown in the parentheses. |
Show the code
```{r control-dependency-table-mental}
#| tbl-cap: "Dependency table for type of control group (mental health)"
#| tbl-cap-location: top
#| label: tbl-control-subgroup-mental
control_subgroup_dat_cross_mental <- cat_dat_cross(
data = mental_health_dat,
variable = control,
study_id = study
)
control_subgroup_dat_cross_mental |>
knitr::kable(
"html",
col.names = c(
"Control",
colnames(control_subgroup_dat_cross_mental)[-1]
)
) |>
kableExtra::column_spec(1, bold = TRUE) |>
kableExtra::footnote(
general = "See note in the reintegration table to the left.",
general_title = "Note: ",
footnote_as_chunk = T
) |>
kableExtra::kable_styling(bootstrap_options = c("striped", "condensed"), full_width = T)
```| Control | Individual treatment | TAU | TAU with Waiting-list | Waiting-list only |
|---|---|---|---|---|
| Individual treatment | 2 (3) | - | - | - |
| TAU | - | 28 (108) | - | - |
| TAU with Waiting-list | - | - | 8 (23) | - |
| Waiting-list only | - | - | - | 3 (7) |
| Note: See note in the reintegration table to the left. |
Show the code
```{r control-ridge-reint}
#| label: fig-control-ridge-reint
#| fig-cap: "Distribution of effect size estimates, by type of control group (reintegrational outcome)."
#| fig.width: 6
#| fig.height: 4
#| fig.retina: 2
#| message: false
cat_ridge(data = reintegation_dat, es = gt_pop, variable = control, v = vgt_pop)
```Show the code
```{r control-ridge-mental}
#| label: fig-control-ridge-mental
#| fig-cap: "Distribution of effect size estimates, by type of control group (mental health)."
#| fig.height: 6.5
#| fig.retina: 2
#| message: false
cat_ridge(data = mental_health_dat, es = gt_pop, variable = control, v = vgt_pop)
```Risk of bias (RoB)
Show the code
```{r rob-dependency-table-reint}
#| tbl-cap: "Dependency table across overall risk of bias assessments (reintegration)"
#| tbl-cap-location: top
#| label: tbl-rob-subgroup
rob_subgroup_dat_cross <- cat_dat_cross(
data = reintegation_dat,
variable = overall_rob,
study_id = study
)
rob_subgroup_dat_cross |>
knitr::kable(
"html",
col.names = c(
"Risk of bias judgment",
colnames(rob_subgroup_dat_cross)[-1]
)
) |>
kableExtra::column_spec(1, bold = TRUE) |>
kableExtra::footnote(
general = paste0("Values outside the parentheses are number of studies,", "
with the number of samples and effect size estimates shown in the parentheses."
),
general_title = "Note: ",
footnote_as_chunk = T
) |>
kableExtra::kable_styling(bootstrap_options = c("striped", "condensed"), full_width = T)
```| Risk of bias judgment | Low | Some concerns/Moderate | Serious/High |
|---|---|---|---|
| Low | 10 (69) | - | - |
| Some concerns/Moderate | - | 21 (94) | 1 (1) |
| Serious/High | - | 1 (1) | 15 (39) |
| Note: Values outside the parentheses are number of studies, with the number of samples and effect size estimates shown in the parentheses. |
Show the code
```{r rob-dependency-table-mental}
#| tbl-cap: "Dependency table across overall risk of bias assessments (mental health)"
#| tbl-cap-location: top
#| label: tbl-rob-subgroup-mental
rob_subgroup_dat_cross_mental <- cat_dat_cross(
data = mental_health_dat,
variable = overall_rob,
study_id = study
)
rob_subgroup_dat_cross_mental |>
knitr::kable(
"html",
col.names = c(
"Risk of bias judgment",
colnames(rob_subgroup_dat_cross_mental)[-1]
)
) |>
kableExtra::column_spec(1, bold = TRUE) |>
kableExtra::footnote(
general = paste0("Values outside the parentheses are number of studies,", "
with the number of samples and effect size estimates shown in the parentheses."
),
general_title = "Note: ",
footnote_as_chunk = T
) |>
kableExtra::kable_styling(bootstrap_options = c("striped", "condensed"), full_width = T)
```| Risk of bias judgment | Low | Some concerns/Moderate | Serious/High |
|---|---|---|---|
| Low | 10 (36) | - | - |
| Some concerns/Moderate | - | 20 (79) | 1 (2) |
| Serious/High | - | 1 (2) | 12 (26) |
| Note: Values outside the parentheses are number of studies, with the number of samples and effect size estimates shown in the parentheses. |
Show the code
```{r rob-ridge-reint}
#| label: fig-rob-ridge-reint
#| fig-cap: "Distribution of effect size estimates, by overall risk of bias assessment (reintegrational outcome)."
#| fig.width: 6
#| fig.height: 4
#| fig.retina: 2
#| message: false
cat_ridge(data = reintegation_dat, es = gt_pop, variable = overall_rob, v = vgt_pop)
```Show the code
```{r rob-ridge-mental}
#| label: fig-rob-ridge-mental
#| fig-cap: "Distribution of effect size estimates, by overall risk of bias assessment (mental health)."
#| fig.height: 6.5
#| fig.retina: 2
#| message: false
cat_ridge(data = gb_dat, es = gt_pop, variable = overall_rob, v = vgt_pop)
```Preregistered vs. not preregistered studies
Show the code
```{r prereg-dependency-table-reint}
#| tbl-cap: "Dependency table by type of registration (reintegration)"
#| tbl-cap-location: top
#| label: tbl-prereg-subgroup
prereg_subgroup_dat_cross <- cat_dat_cross(
data = reintegation_dat,
variable = prereg_chr,
study_id = study
)
prereg_subgroup_dat_cross |>
knitr::kable(
"html",
col.names = c(
"Registration",
colnames(prereg_subgroup_dat_cross)[-1]
)
) |>
kableExtra::column_spec(1, bold = TRUE) |>
kableExtra::footnote(
general = paste0("Values outside the parentheses are number of studies,", "
with the number of samples and effect size estimates shown in the parentheses."
),
general_title = "Note: ",
footnote_as_chunk = T
) |>
kableExtra::kable_styling(bootstrap_options = c("striped", "condensed"), full_width = T)
```| Registration | Not preregistered | Preregistered |
|---|---|---|
| Not preregistered | 22 (61) | - |
| Preregistered | - | 23 (141) |
| Note: Values outside the parentheses are number of studies, with the number of samples and effect size estimates shown in the parentheses. |
Show the code
```{r prereg-dependency-table-mental}
#| tbl-cap: "Dependency table by type of registration (mental health)"
#| tbl-cap-location: top
#| label: tbl-prereg-subgroup-mental
prereg_subgroup_dat_cross_mental <- cat_dat_cross(
data = mental_health_dat,
variable = prereg_chr,
study_id = study
)
prereg_subgroup_dat_cross_mental |>
knitr::kable(
"html",
col.names = c(
"Risk of bias judgment",
colnames(prereg_subgroup_dat_cross_mental)[-1]
)
) |>
kableExtra::column_spec(1, bold = TRUE) |>
kableExtra::footnote(
general = paste0("Values outside the parentheses are number of studies,", "
with the number of samples and effect size estimates shown in the parentheses."
),
general_title = "Note: ",
footnote_as_chunk = T
) |>
kableExtra::kable_styling(bootstrap_options = c("striped", "condensed"), full_width = T)
```| Risk of bias judgment | Not preregistered | Preregistered |
|---|---|---|
| Not preregistered | 20 (57) | - |
| Preregistered | - | 21 (84) |
| Note: Values outside the parentheses are number of studies, with the number of samples and effect size estimates shown in the parentheses. |
Show the code
```{r prereg-ridge-reint}
#| label: fig-prereg-ridge-reint
#| fig-cap: "Distribution of effect size estimates, by type of registration (reintegrational outcome)."
#| fig.width: 6
#| fig.height: 4
#| fig.retina: 2
#| message: false
cat_ridge(data = reintegation_dat, es = gt_pop, variable = prereg_chr, v = vgt_pop)
```Show the code
```{r prereg-ridge-mental}
#| label: fig-prereg-ridge-mental
#| fig-cap: "Distribution of effect size estimates, by type of registration (mental health)."
#| fig.height: 6.5
#| fig.retina: 2
#| message: false
cat_ridge(data = gb_dat, es = gt_pop, variable = prereg_chr, v = vgt_pop)
```Show the code
```{r prereg-rob-ridge-mental}
#| label: fig-prereg-rob-ridge-mental
#| fig-cap: "Distribution of effect size estimates, by risk of bias assessemnt across outcomes and registration (mental health)."
#| fig.height: 6
#| fig.width: 9
#| fig.retina: 2
#| message: false
cat_ridge(data = gb_dat, es = gt_pop, variable = overall_rob, v = vgt_pop) +
facet_grid(outcome_construct~prereg_chr) +
theme(
strip.background = element_rect(color = "black", fill = "gray92")
)
```Continuous moderators
Show the code
```{r, continuous-mod-reint}
#| tbl-cap: "Distribution of continuous moderators (reintegration)"
#| tbl-cap-location: top
#| label: tbl-continuous-characteristics-reint
var_labels <- c(
"Mean age" = "age",
"Percent Male" = "male_pct",
"Total Number of Sessions" = "sessions",
"Sessions per Week" = "intensity",
"Length of Intervention (in Weeks)" = "duration",
"Weeks After End of Intervention" = "timing",
"Weeks from Baseline" = "weeks_from_baseline"
)
continuous_descriptives <-
reintegation_dat |>
summarise(
age = mean(age_mean),
male_pct = mean(male_pct),
sessions = mean(total_number_of_sessions),
intensity = mean(sessions_per_week),
duration = mean(duration_in_weeks),
timing = mean(time_after_end_intervention_weeks),
weeks_from_baseline = mean(time_from_baseline_weeks),
.by = study
)
continuous_descriptives_tab <-
continuous_descriptives |>
#pivot_longer(
# cols = age:male_pct,
# names_to = "var",
# values_to = "val"
#) |>
#arrange(var)
gather(var, val, age, male_pct, sessions, intensity, duration, timing, weeks_from_baseline) |>
summarise(
`% Missing` = 100 * mean(is.na(val)),
Mean = mean(val, na.rm = TRUE),
SD = sd(val, na.rm = TRUE),
Min = min(val, na.rm = TRUE),
LQ = quantile(val, na.rm = TRUE)[2],
Median = median(val, na.rm = TRUE),
UQ = quantile(val, na.rm = TRUE)[4],
Max = max(val, na.rm = TRUE),
.by = var
) |>
mutate(
var = factor(var, levels = var_labels, labels = names(var_labels))
)
knitr::kable(
continuous_descriptives_tab,
col.names = c("Variable", colnames(continuous_descriptives_tab)[-1]),
digits = 1,
booktabs = TRUE
) |>
kable_styling(bootstrap_options = c("striped", "condensed"), full_width = FALSE) |>
collapse_rows(1, valign = "top")
```| Variable | % Missing | Mean | SD | Min | LQ | Median | UQ | Max |
|---|---|---|---|---|---|---|---|---|
| Mean age | 0.0 | 40.7 | 9.1 | 24.9 | 35.6 | 40.8 | 43.8 | 67.4 |
| Percent Male | 2.2 | 45.8 | 23.0 | 0.0 | 31.5 | 45.7 | 67.4 | 79.5 |
| Total Number of Sessions | 2.2 | 21.2 | 22.0 | 3.0 | 8.0 | 12.0 | 24.0 | 104.0 |
| Sessions per Week | 2.2 | 1.3 | 1.5 | 0.1 | 1.0 | 1.0 | 1.0 | 10.5 |
| Length of Intervention (in Weeks) | 0.0 | 18.6 | 17.0 | 4.0 | 8.0 | 12.0 | 24.0 | 78.0 |
| Weeks After End of Intervention | 0.0 | 6.0 | 10.2 | 0.0 | 0.0 | 1.0 | 6.5 | 52.0 |
| Weeks from Baseline | 0.0 | 24.6 | 22.8 | 6.0 | 12.0 | 18.0 | 26.0 | 130.0 |
Show the code
```{r, continuous-mod-mental}
#| tbl-cap: "Distribution of continuous moderators (mental health)"
#| tbl-cap-location: top
#| label: tbl-continuous-characteristics-mental
var_labels_mental <- c(
"Mean age" = "age",
"Percent Male" = "male_pct",
"N Sessions" = "sessions",
"Sessions Week" = "intensity",
"Length" = "duration",
"Weeks After Intervention" = "timing",
"Weeks Baseline" = "weeks_from_baseline"
)
continuous_descriptives_mental <-
mental_health_dat |>
summarise(
age = mean(age_mean),
male_pct = mean(male_pct),
sessions = mean(total_number_of_sessions),
intensity = mean(sessions_per_week),
duration = mean(duration_in_weeks),
timing = mean(time_after_end_intervention_weeks),
weeks_from_baseline = mean(time_from_baseline_weeks),
.by = study
)
continuous_descriptives_tab_mental <-
continuous_descriptives_mental |>
#pivot_longer(
# cols = age:male_pct,
# names_to = "var",
# values_to = "val"
#) |>
#arrange(var)
gather(var, val, age, male_pct, sessions, intensity, duration, timing, weeks_from_baseline) |>
summarise(
`% Missing` = 100 * mean(is.na(val)),
Mean = mean(val, na.rm = TRUE),
SD = sd(val, na.rm = TRUE),
Min = min(val, na.rm = TRUE),
LQ = quantile(val, na.rm = TRUE)[2],
Median = median(val, na.rm = TRUE),
UQ = quantile(val, na.rm = TRUE)[4],
Max = max(val, na.rm = TRUE),
.by = var
) |>
mutate(
var = factor(var, levels = var_labels_mental, labels = names(var_labels_mental))
)
knitr::kable(
continuous_descriptives_tab_mental,
col.names = c("Variable", colnames(continuous_descriptives_tab)[-1]),
digits = 1,
booktabs = TRUE
) |>
kable_styling(bootstrap_options = c("striped", "condensed"), full_width = FALSE) |>
collapse_rows(1, valign = "top")
```| Variable | % Missing | Mean | SD | Min | LQ | Median | UQ | Max |
|---|---|---|---|---|---|---|---|---|
| Mean age | 0.0 | 39.6 | 9.4 | 21.6 | 34.8 | 39.8 | 43.1 | 67.4 |
| Percent Male | 2.4 | 44.3 | 23.1 | 0.0 | 28.7 | 45.7 | 64.1 | 77.8 |
| N Sessions | 2.4 | 22.0 | 22.7 | 3.0 | 9.5 | 13.0 | 24.0 | 104.0 |
| Sessions Week | 2.4 | 1.3 | 1.6 | 0.1 | 1.0 | 1.0 | 1.0 | 10.5 |
| Length | 0.0 | 19.6 | 17.6 | 4.0 | 10.0 | 12.0 | 26.0 | 78.0 |
| Weeks After Intervention | 0.0 | 7.0 | 11.1 | 0.0 | 0.0 | 1.0 | 8.0 | 52.0 |
| Weeks Baseline | 0.0 | 26.6 | 24.3 | 6.0 | 12.0 | 18.0 | 29.0 | 130.0 |
Age distribution across studies
Show the code
```{r density-plot-function}
density_plot <- function(variable, x_title, data, color = "cornflowerblue") {
require(dplyr)
require(tidyr)
require(ggplot2)
require(rlang)
require(MetBrewer)
var_exp <- enquo(variable)
var_str <- as_label(var_exp)
data |>
ggplot(aes(x = !!var_exp)) +
geom_density(fill = color, alpha = 0.8) +
geom_rug(alpha = 0.7, length = unit(0.04, "npc")) +
scale_y_continuous(labels = scales::label_number(accuracy = 10^(-3))) +
theme_minimal() +
labs(x = x_title, y = "")
}
```Show the code
```{r age-density-reint}
#| label: fig-age-density-reint
#| fig-cap: "Distribution of average age in a study (reintegrational)."
#| fig.width: 6
#| fig.height: 4
#| fig.retina: 2
#| message: false
age_density <- density_plot(age, "Mean Age", continuous_descriptives)
age_density + expand_limits(x = 70)
```Show the code
```{r age-density-mental}
#| label: fig-age-density-mental
#| fig-cap: "Distribution of average age in a study (mental health)."
#| fig.height: 6.5
#| fig.retina: 2
#| message: false
age_density_mental <- density_plot(age, "Mean Age", continuous_descriptives_mental, color = "gray")
age_density_mental + expand_limits(x = 70)
```Percent males in sample distribution across studies
Show the code
```{r males-density-reint}
#| label: fig-males-density-reint
#| fig-cap: "Distribution proportion of males in each study (reintegration)."
#| fig.width: 6
#| fig.height: 4
#| fig.retina: 2
#| message: false
male_density <- suppressWarnings(density_plot(male_pct, "Proportion Male", continuous_descriptives))
male_density
```Show the code
```{r males-density-mental}
#| label: fig-males-density-mental
#| fig-cap: "Distribution proportion of males in each study (mental health)."
#| fig.height: 6.5
#| fig.retina: 2
#| message: false
male_density_mental <- suppressWarnings(density_plot(male_pct, "Proportion Male", continuous_descriptives_mental, color = "gray"))
male_density_mental
```Total number of sessions
Show the code
```{r hist-plot-function}
hist_plot <- function(variable, x_title, data, color = "cornflowerblue") {
require(dplyr)
require(tidyr)
require(ggplot2)
require(rlang)
require(MetBrewer)
var_exp <- enquo(variable)
var_str <- as_label(var_exp)
x_vals <- data[[var_str]]
min_val <- floor(min(x_vals, na.rm = TRUE))
max_val <- ceiling(max(x_vals, na.rm = TRUE))
data |>
ggplot(aes(x = !!var_exp)) +
geom_histogram(binwidth = 1, boundary = 0, fill = color, alpha = 0.8) +
scale_x_continuous(breaks = pretty(seq(min_val, max_val, by = 1), n = 5)) +
scale_y_continuous(breaks = seq(0, 10, 2)) +
theme_minimal() +
labs(x = x_title, y = "")
}
```Show the code
```{r sessions-hist-reint}
#| label: fig-sessions-hist-reint
#| fig-cap: "Distribution of study sessions (reintegration)."
#| fig.width: 7
#| fig.height: 4
#| fig.retina: 2
#| message: false
sessions_hist <- hist_plot(sessions, "Total Number of Sessions in Intervention", continuous_descriptives)
sessions_hist + labs(title = "Reintegration") + theme(plot.title = element_text(hjust = 0.5))
```Show the code
```{r sessions-hist-mental}
#| label: fig-sessions-hist-mental
#| fig-cap: "Distribution of study sessions (mental health)."
#| fig.height: 6.5
#| fig.retina: 2
#| message: false
sessions_hist_mental <- hist_plot(sessions, "Total Number of Sessions in Intervention", continuous_descriptives_mental, color = "gray")
sessions_hist_mental + labs(title = "Mental Health") + theme(plot.title = element_text(hjust = 0.5))
```Duration and intensity (number of sessions per week)
Show the code
```{r duration-plot-reint}
#| label: fig-duration-reint
#| fig-cap: "Length of intervention in weeks (reintegration)"
#| fig.width: 6.8
#| fig.height: 7
#| fig.retina: 2
#| fig.topcaption: TRUE
#| message: false
reintegation_dat |>
select(study, duration_in_weeks, sessions_per_week, N_total) |>
filter(!is.na(sessions_per_week)) |>
arrange(desc(duration_in_weeks)) |>
mutate(
study = factor(study, levels = unique(study)),
sessions = case_when(
sessions_per_week < 1 ~ "1<",
sessions_per_week == 1 ~ "1",
sessions_per_week == 1.5 ~ "1.5",
sessions_per_week == 2 ~ "2",
sessions_per_week == 2.5 ~ "2.5",
sessions_per_week > 2 ~ ">10"
),
sessions = factor(sessions, levels = unique(sessions))
) |>
ggplot(aes(y = study, x = duration_in_weeks, color = study)) +
geom_segment(aes(x = 0, xend = duration_in_weeks, y = study, yend = study)) +
geom_vline(xintercept = c(13, 26, 52, 78), linetype = "dashed", alpha = 0.5) +
geom_point(
aes(size = N_total)
) +
scale_x_continuous(breaks = seq(0, 80, 10)) +
facet_grid(vars(sessions_per_week), scales = "free_y", space = "free_y", switch = "y") +
#scale_size(breaks = c(0.5, 1, 1.5, 2, 10.5), limits = c(0, 10.5)) +
labs(
x = "Lenght of intervention in weeks",
y = "",
caption = paste0(
"The light gray facet grids indicate the average number of sessions per week.\n",
"The dashed lines indicate 3 months, 6 months, 1 year, and 1.5 years, respectively.\n",
"The point sizes are weighted by the study sample sizes."
)
) +
theme_minimal() +
scale_colour_discrete(guide = "none") +
theme(
legend.position = "none",
strip.text = element_text(color = "black"),
strip.background.y = element_rect(fill = "gray93", color = "white"),
strip.text.y.left = element_text(angle = 0),
plot.caption = element_text(hjust = 0)
)
```Show the code
```{r duration-plot-mental}
#| label: fig-duration-mental
#| fig-cap: "Length of intervention in weeks (mental health)"
#| fig.height: 11
#| fig.retina: 2
#| fig.topcaption: TRUE
#| message: false
mental_health_dat |>
select(study, duration_in_weeks, sessions_per_week, N_total) |>
filter(!is.na(sessions_per_week)) |>
arrange(desc(duration_in_weeks)) |>
mutate(
study = factor(study, levels = unique(study)),
sessions = case_when(
sessions_per_week < 1 ~ "Less than 1",
sessions_per_week == 1 ~ "1 per week",
sessions_per_week == 2 ~ "2 per week",
sessions_per_week > 2 ~ ">10"
),
sessions = factor(sessions, levels = unique(sessions))
) |>
ggplot(aes(y = study, x = duration_in_weeks, color = study)) +
geom_segment(aes(x = 0, xend = duration_in_weeks, y = study, yend = study)) +
geom_vline(xintercept = c(13, 26, 52, 78), linetype = "dashed", alpha = 0.5) +
geom_point(
aes(size = N_total)
) +
scale_x_continuous(breaks = seq(0, 80, 10)) +
facet_grid(vars(sessions_per_week), scales = "free_y", space = "free_y", switch = "y") +
#scale_size(breaks = c(0.5, 1, 1.5, 2, 10.5), limits = c(0, 10.5)) +
labs(
x = "Lenght of intervention in weeks",
y = "",
caption =
paste0(
"The light gray facet grids indicate the average number of sessions per week.\n",
"The dashed lines indicate 3 months, 6 months, 1 year, and 1.5 years, respectively.\n",
"The point sizes are weighted by the study sample sizes."
)
) +
theme_minimal() +
scale_colour_discrete(guide = "none") +
theme(
legend.position = "none",
strip.text = element_text(color = "black"),
strip.background.y = element_rect(fill = "gray93", color = "white"),
strip.text.y.left = element_text(angle = 0),
plot.caption = element_text(hjust = 0)
)
```Weeks after end of intervention
Show the code
```{r follow-up-plot-connected-reint}
#| label: fig-follow-up-connected-reint
#| fig-cap: "Weeks after end of interventions for all studies (reintegration)"
#| fig.width: 6.5
#| fig.height: 7
#| fig.retina: 2
#| fig.topcaption: TRUE
#| message: false
reintegation_dat |>
select(study, time_after_end_intervention_weeks, N_total) |>
arrange(desc(study)) |>
mutate(study = factor(study, levels = unique(study))) |>
ggplot(aes(y = study, x = time_after_end_intervention_weeks, color = study)) +
geom_point(aes(size = N_total),
alpha = 0.5) +
geom_line() +
labs(x = "Weeks after end of intervention all studies", y = "")+
theme_minimal() +
theme(legend.position = "none")
```Show the code
```{r follow-up-plot-connected-mental}
#| label: fig-follow-up-connected-mental
#| fig-cap: "Weeks after end of interventions for all studies (mental health)"
#| fig.height: 11
#| fig.retina: 2
#| fig.topcaption: TRUE
#| message: false
mental_health_dat |>
select(study, time_after_end_intervention_weeks, N_total) |>
arrange(desc(study)) |>
mutate(study = factor(study, levels = unique(study))) |>
ggplot(aes(y = study, x = time_after_end_intervention_weeks, color = study)) +
geom_point(aes(size = N_total),
alpha = 0.5) +
geom_line() +
labs(x = "Weeks after end of intervention all studies", y = "")+
theme_minimal() +
theme(legend.position = "none")
```Correlation between effect size estimates and measurement timing
Show the code
```{r es-time-plot-reint}
#| label: fig-es-time-reint
#| fig-cap: "Length of intervention in weeks (reintegration)"
#| fig.width: 6
#| fig.height: 4
#| fig.retina: 2
#| fig.topcaption: TRUE
#| message: false
reintegation_dat |>
select(study, gt_pop, vgt_pop, time_after_end_intervention_weeks) |>
ggplot() +
aes(x = time_after_end_intervention_weeks, y = gt_pop, color = study) +
geom_vline(xintercept = 0) +
geom_hline(yintercept = 0) +
geom_point(aes(size = 1/vgt_pop), alpha = 0.30) +
geom_smooth(method = "lm", formula = y ~ x, color = "yellow") +
scale_x_continuous(breaks = seq(0, 55, 5)) +
theme_minimal() +
theme(legend.position = "none") +
labs(x = "Follow-up duration (months)", y = "Hedges' g")
```Show the code
```{r es-time-plot-mental}
#| label: fig-es-time-mental
#| fig-cap: "Length of intervention in weeks (mental health)"
#| fig.height: 6
#| fig.retina: 2
#| fig.topcaption: TRUE
#| message: false
mental_health_dat |>
select(study, gt_pop, vgt_pop, time_after_end_intervention_weeks) |>
ggplot() +
aes(x = time_after_end_intervention_weeks, y = gt_pop, color = study) +
geom_vline(xintercept = 0) +
geom_hline(yintercept = 0) +
geom_point(aes(size = 1/vgt_pop), alpha = 0.30) +
geom_smooth(method = "lm", formula = y ~ x, color = "yellow") +
scale_x_continuous(breaks = seq(0, 55, 5)) +
theme_minimal() +
theme(legend.position = "none") +
labs(x = "Follow-up duration (months)", y = "Hedges' g")
```Multivariate structure
Covariance plots
Show the code
```{r, multivaraite-plot-reint}
#| label: fig-multivariate-plot-reint
#| fig-cap: "Multivariate structure between substaintial/theoretical categorical and continuous (reintegration)"
#| fig.width: 24
#| fig.height: 24
#| fig.retina: 2
#| message: false
#| eval: true
multivariate_dat_reint <-
reintegation_dat |>
filter(str_detect(analysis_plan, "Alco|Hope|Social|Well")) |>
select(
`Outcome` = analysis_plan,
`Sample diagnosis` = schizophrenia,
`Intervention` = CBT_int,
`Type of test` = test_type,
`Mean age` = age_mean,
`% male` = male_pct,
`Duration` = duration_in_weeks,
`Intensity` = sessions_per_week,
`Follow-up` = time_after_end_intervention_weeks
)
multivariate_pairs_reint <- ggpairs(multivariate_dat_reint) + theme(
text = element_text(size = 18),
axis.text.x = element_text(size = 10, angle = 45, vjust = 1, hjust=1),
axis.text.y = element_text(size = 10)
)
multivariate_pairs_reint
```Show the code
```{r, multivaraite-dat-mental}
#| label: fig-multivariate-plot-mental
#| fig-cap: "Multivariate structure between substaintial/theoretical categorical and continuous covariates (mental health)"
#| fig.width: 24
#| fig.height: 24
#| fig.retina: 2
#| message: false
#| eval: true
multivariate_dat_mental <-
mental_health_dat |>
select(
`Outcome` = analysis_plan,
`Sample diagnosis` = schizophrenia,
`Intervention` = CBT_int,
`Type of test` = test_type,
`Mean age` = age_mean,
`% male` = male_pct,
`Duration` = duration_in_weeks,
`Intensity` = sessions_per_week,
`Follow-up` = time_after_end_intervention_weeks
)
multivariate_pairs_mental <- ggpairs(multivariate_dat_mental) + theme(
text = element_text(size = 18),
axis.text.x = element_text(size = 10, angle = 45, vjust = 1, hjust=1),
axis.text.y = element_text(size = 10)
)
multivariate_pairs_mental
```Show the code
```{r, multivaraite-dat-reint-method}
#| label: fig-multivariate-plot-reint-method
#| fig-cap: "Multivariate structure between methodological categorical and continuous covariates (reintegration)"
#| fig.width: 24
#| fig.height: 24
#| fig.retina: 2
#| message: false
#| eval: true
multivariate_dat_reint_method <-
reintegation_dat |>
filter(str_detect(analysis_plan, "Alco|Hope|Social|Well")) |>
select(
`Strategy` = analysis_strategy,
`Design` = QES_design,
`Control grp` = control,
`RoB` = overall_rob,
`Preregistration` = prereg_chr,
`Mean age` = age_mean,
`% male` = male_pct,
`Duration` = duration_in_weeks,
`Intensity` = sessions_per_week,
`Follow-up` = time_after_end_intervention_weeks
)
multivariate_pairs_reint_method <- ggpairs(multivariate_dat_reint_method) + theme(
text = element_text(size = 18),
axis.text.x = element_text(size = 9, angle = 45, vjust = 1, hjust=1),
axis.text.y = element_text(size = 9)
)
multivariate_pairs_reint_method
```Show the code
```{r, multivaraite-dat-mental-method}
#| label: fig-multivariate-plot-mental-method
#| fig-cap: "Multivariate structure between methodological categorical and continuous (mental health)"
#| fig.width: 24
#| fig.height: 24
#| fig.retina: 2
#| message: false
#| eval: true
multivariate_dat_mental_method <-
mental_health_dat |>
select(
`Strategy` = analysis_strategy,
`Design` = QES_design,
`Control grp` = control,
`RoB` = overall_rob,
`Preregistration` = prereg_chr,
`Mean age` = age_mean,
`% male` = male_pct,
`Duration` = duration_in_weeks,
`Intensity` = sessions_per_week,
`Follow-up` = time_after_end_intervention_weeks
)
multivariate_pairs_mental_method <- ggpairs(multivariate_dat_mental_method) + theme(
text = element_text(size = 18),
axis.text.x = element_text(size = 9, angle = 45, vjust = 1, hjust=1),
axis.text.y = element_text(size = 9)
)
multivariate_pairs_mental_method
```Show the code
```{r, multivaraite-dat-reint-method-theoretical}
#| label: fig-multivariate-plot-reint-method-theoretical
#| fig-cap: "Multivariate structure between substantial and methodological categorical covariates (reintegration)"
#| fig.width: 24
#| fig.height: 24
#| fig.retina: 2
#| message: false
#| eval: true
multivariate_dat_reint_method_theo <-
reintegation_dat |>
filter(str_detect(analysis_plan, "Alco|Hope|Social|Well")) |>
select(
`Outcome` = analysis_plan,
`Sample diagnosis` = schizophrenia,
`Intervention` = CBT_int,
`Type of test` = test_type,
`Strategy` = analysis_strategy,
`Design` = QES_design,
`Control grp` = control,
`RoB` = overall_rob,
`Preregistration` = prereg_chr
)
multivariate_pairs_reint_method_theo <- ggpairs(multivariate_dat_reint_method_theo) + theme(
text = element_text(size = 18),
axis.text.x = element_text(size = 9, angle = 45, vjust = 1, hjust=1),
axis.text.y = element_text(size = 9)
)
multivariate_pairs_reint_method_theo
```Show the code
```{r, multivaraite-dat-mental-method-theoretical}
#| label: fig-multivariate-plot-mental-method-theoretical
#| fig-cap: "Multivariate structure between substantial and methodological categorical covariates (mental health)"
#| fig.width: 24
#| fig.height: 24
#| fig.retina: 2
#| message: false
#| eval: true
multivariate_dat_mental_method_theo <-
mental_health_dat |>
select(
`Outcome` = analysis_plan,
`Sample diagnosis` = schizophrenia,
`Intervention` = CBT_int,
`Type of test` = test_type,
`Strategy` = analysis_strategy,
`Design` = QES_design,
`Control grp` = control,
`RoB` = overall_rob,
`Preregistration` = prereg_chr,
`Mean age` = age_mean,
`% male` = male_pct,
`Duration` = duration_in_weeks,
`Intensity` = sessions_per_week,
`Follow-up` = time_after_end_intervention_weeks
)
multivariate_pairs_mental_method_theo <- ggpairs(multivariate_dat_mental_method_theo) + theme(
text = element_text(size = 18),
axis.text.x = element_text(size = 9, angle = 45, vjust = 1, hjust=1),
axis.text.y = element_text(size = 9)
)
multivariate_pairs_mental_method_theo
```Covariance matrices
Show the code
```{r correlation-matrix-reint}
#| tbl-cap: "Correlation matrix across all reintegration outcomes."
#| tbl-cap-location: top
#| label: tbl-cor-matix-reint
#| message: false
cor_mat_dat_cat <-
reintegation_dat |>
filter(str_detect(analysis_plan, "Alco|Hope|Social|Well") & test_type != "Raw events") |>
select(
plan = analysis_plan,
samp = schizophrenia,
treat = CBT_int,
test = test_type,
str = analysis_strategy,
des = QES_design,
ctr = control,
rob = overall_rob,
pre = prereg_chr
)
cat_dummy_dat <-
fastDummies::dummy_cols(cor_mat_dat_cat) %>%
select(where(is.numeric))
cor_mat_dat_con <-
reintegation_dat |>
filter(str_detect(analysis_plan, "Alco|Hope|Social|Well") & test_type != "Raw events") |>
select(
age = age_mean,
male = male_pct,
dur = duration_in_weeks,
int = sessions_per_week,
FU = time_after_end_intervention_weeks,
sess = total_number_of_sessions
)
cor_mat_dat <-
bind_cols(cat_dummy_dat, cor_mat_dat_con) |>
select(
alcho = `plan_Alcohol and drug abuse/misuse`,
hope = `plan_Hope, empowerment & self-efficacy`,
sfunc = `plan_Social functioning (degree of impairment)`,
wellb = `plan_Wellbeing and quality of life`,
s_schizo = samp_Schizophrenia,
s_oth = samp_Other,
cbt_trt = treat_CBT,
oth_trt = treat_Other,
test_clin = `test_Clinician-rated measure`,
test_self = `test_Self-reported`,
itt = str_ITT,
tot = str_TOT,
qes = des_QES,
rct = des_RCT,
tau = ctr_TAU,
tau_wait = `ctr_TAU with Waiting-list`,
wait = `ctr_Waiting-list only`,
ind_trt = `ctr_Individual treatment` ,
rob_low = rob_Low,
rob_mod = `rob_Some concerns/Moderate`,
rob_high = `rob_Serious/High`,
prereg = pre_Preregistered,
conventional = `pre_Not preregistered`,
everything()
) |>
na.omit()
cor_mat <-
cor(
model.matrix(
reformulate(names(cor_mat_dat[,1:ncol(cor_mat_dat)])),
data = cor_mat_dat
)
) |>
as.data.frame() |>
select(-c(`(Intercept)`)) |>
na.omit() |>
mutate(
across(.cols = everything(), ~ round(.x, 2))
)
cor_mat_formatted <-
cor_mat |>
mutate(
across(.cols = everything(), ~ cell_spec(.x, bold = ifelse(abs(.x) > 0.5, T, F)))
)
kbl(
cor_mat_formatted,
escape = F,
col.names = c("Category", colnames(cor_mat))
) |>
kable_styling(
bootstrap_options = c("striped", "hover"),
font_size = 10
) |>
scroll_box(width = "100%", height = "100%", fixed_thead = TRUE)
```| Category | alcho | hope | sfunc | wellb | s_schizo | s_oth | cbt_trt | oth_trt | test_clin | test_self | itt | tot | qes | rct | tau | tau_wait | wait | ind_trt | rob_low | rob_mod | rob_high | prereg | conventional | age | male | dur | int | FU | sess |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| alcho | 1 | -0.22 | -0.27 | -0.36 | -0.19 | 0.19 | -0.23 | 0.23 | 0.49 | -0.49 | 0.33 | -0.33 | 0.03 | -0.03 | 0.04 | 0.03 | -0.1 | -0.06 | -0.36 | 0.39 | -0.05 | 0.02 | -0.02 | -0.26 | -0.37 | 0.01 | 0.06 | -0.05 | 0.14 |
| hope | -0.22 | 1 | -0.28 | -0.38 | 0.02 | -0.02 | -0.31 | 0.31 | -0.23 | 0.23 | -0.16 | 0.16 | -0.05 | 0.05 | -0.16 | -0.02 | 0.32 | 0.05 | -0.22 | 0.17 | 0.06 | -0.17 | 0.17 | 0.12 | 0.17 | -0.14 | -0.04 | -0.13 | -0.11 |
| sfunc | -0.27 | -0.28 | 1 | -0.46 | 0.19 | -0.19 | 0.23 | -0.23 | -0.04 | 0.04 | -0.01 | 0.01 | -0.08 | 0.08 | 0.06 | 0 | -0.13 | 0.02 | 0.3 | -0.26 | -0.04 | 0.06 | -0.06 | -0.17 | 0.02 | 0.3 | -0.06 | 0.19 | 0.17 |
| wellb | -0.36 | -0.38 | -0.46 | 1 | -0.04 | 0.04 | 0.22 | -0.22 | -0.16 | 0.16 | -0.13 | 0.13 | 0.08 | -0.08 | 0.04 | -0.01 | -0.06 | -0.01 | 0.19 | -0.2 | 0.03 | 0.07 | -0.07 | 0.27 | 0.13 | -0.16 | 0.04 | -0.02 | -0.17 |
| s_schizo | -0.19 | 0.02 | 0.19 | -0.04 | 1 | -1 | -0.26 | 0.26 | -0.07 | 0.07 | 0.2 | -0.2 | -0.02 | 0.02 | 0.12 | -0.16 | -0.09 | 0.2 | 0.38 | -0.36 | -0.02 | 0.08 | -0.08 | -0.21 | 0.5 | 0.49 | -0.01 | 0.06 | 0.38 |
| s_oth | 0.19 | -0.02 | -0.19 | 0.04 | -1 | 1 | 0.26 | -0.26 | 0.07 | -0.07 | -0.2 | 0.2 | 0.02 | -0.02 | -0.12 | 0.16 | 0.09 | -0.2 | -0.38 | 0.36 | 0.02 | -0.08 | 0.08 | 0.21 | -0.5 | -0.49 | 0.01 | -0.06 | -0.38 |
| cbt_trt | -0.23 | -0.31 | 0.23 | 0.22 | -0.26 | 0.26 | 1 | -1 | -0.11 | 0.11 | -0.25 | 0.25 | -0.03 | 0.03 | 0.13 | -0.15 | -0.02 | 0.01 | 0.31 | -0.2 | -0.15 | 0.1 | -0.1 | 0.04 | -0.32 | -0.26 | -0.04 | 0.2 | -0.27 |
| oth_trt | 0.23 | 0.31 | -0.23 | -0.22 | 0.26 | -0.26 | -1 | 1 | 0.11 | -0.11 | 0.25 | -0.25 | 0.03 | -0.03 | -0.13 | 0.15 | 0.02 | -0.01 | -0.31 | 0.2 | 0.15 | -0.1 | 0.1 | -0.04 | 0.32 | 0.26 | 0.04 | -0.2 | 0.27 |
| test_clin | 0.49 | -0.23 | -0.04 | -0.16 | -0.07 | 0.07 | -0.11 | 0.11 | 1 | -1 | 0.23 | -0.23 | 0.09 | -0.09 | 0.17 | -0.11 | -0.11 | -0.06 | -0.28 | 0.26 | 0.02 | -0.03 | 0.03 | -0.19 | -0.37 | -0.03 | 0.06 | -0.02 | 0.03 |
| test_self | -0.49 | 0.23 | 0.04 | 0.16 | 0.07 | -0.07 | 0.11 | -0.11 | -1 | 1 | -0.23 | 0.23 | -0.09 | 0.09 | -0.17 | 0.11 | 0.11 | 0.06 | 0.28 | -0.26 | -0.02 | 0.03 | -0.03 | 0.19 | 0.37 | 0.03 | -0.06 | 0.02 | -0.03 |
| itt | 0.33 | -0.16 | -0.01 | -0.13 | 0.2 | -0.2 | -0.25 | 0.25 | 0.23 | -0.23 | 1 | -1 | -0.1 | 0.1 | 0.26 | -0.1 | -0.24 | -0.15 | -0.19 | 0.25 | -0.1 | 0.17 | -0.17 | -0.15 | -0.02 | 0.27 | -0.02 | -0.07 | 0.21 |
| tot | -0.33 | 0.16 | 0.01 | 0.13 | -0.2 | 0.2 | 0.25 | -0.25 | -0.23 | 0.23 | -1 | 1 | 0.1 | -0.1 | -0.26 | 0.1 | 0.24 | 0.15 | 0.19 | -0.25 | 0.1 | -0.17 | 0.17 | 0.15 | 0.02 | -0.27 | 0.02 | 0.07 | -0.21 |
| qes | 0.03 | -0.05 | -0.08 | 0.08 | -0.02 | 0.02 | -0.03 | 0.03 | 0.09 | -0.09 | -0.1 | 0.1 | 1 | -1 | -0.01 | -0.1 | 0.07 | 0.17 | -0.18 | -0.18 | 0.51 | -0.41 | 0.41 | -0.12 | -0.06 | 0.22 | 0.41 | -0.07 | 0.47 |
| rct | -0.03 | 0.05 | 0.08 | -0.08 | 0.02 | -0.02 | 0.03 | -0.03 | -0.09 | 0.09 | 0.1 | -0.1 | -1 | 1 | 0.01 | 0.1 | -0.07 | -0.17 | 0.18 | 0.18 | -0.51 | 0.41 | -0.41 | 0.12 | 0.06 | -0.22 | -0.41 | 0.07 | -0.47 |
| tau | 0.04 | -0.16 | 0.06 | 0.04 | 0.12 | -0.12 | 0.13 | -0.13 | 0.17 | -0.17 | 0.26 | -0.26 | -0.01 | 0.01 | 1 | -0.8 | -0.44 | -0.26 | 0.1 | 0.11 | -0.29 | 0.04 | -0.04 | 0.02 | -0.07 | 0.06 | -0.3 | 0.28 | -0.11 |
| tau_wait | 0.03 | -0.02 | 0 | -0.01 | -0.16 | 0.16 | -0.15 | 0.15 | -0.11 | 0.11 | -0.1 | 0.1 | -0.1 | 0.1 | -0.8 | 1 | -0.09 | -0.05 | 0 | -0.26 | 0.37 | 0.2 | -0.2 | -0.11 | 0.03 | -0.07 | 0.17 | -0.24 | 0.07 |
| wait | -0.1 | 0.32 | -0.13 | -0.06 | -0.09 | 0.09 | -0.02 | 0.02 | -0.11 | 0.11 | -0.24 | 0.24 | 0.07 | -0.07 | -0.44 | -0.09 | 1 | -0.03 | -0.17 | 0.23 | -0.09 | -0.32 | 0.32 | 0.24 | 0 | -0.08 | 0.3 | -0.09 | 0.02 |
| ind_trt | -0.06 | 0.05 | 0.02 | -0.01 | 0.2 | -0.2 | 0.01 | -0.01 | -0.06 | 0.06 | -0.15 | 0.15 | 0.17 | -0.17 | -0.26 | -0.05 | -0.03 | 1 | -0.01 | -0.04 | 0.07 | -0.13 | 0.13 | -0.14 | 0.14 | 0.14 | 0 | -0.08 | 0.11 |
| rob_low | -0.36 | -0.22 | 0.3 | 0.19 | 0.38 | -0.38 | 0.31 | -0.31 | -0.28 | 0.28 | -0.19 | 0.19 | -0.18 | 0.18 | 0.1 | 0 | -0.17 | -0.01 | 1 | -0.75 | -0.32 | 0.45 | -0.45 | -0.01 | 0.12 | 0.36 | -0.31 | 0.28 | 0.01 |
| rob_mod | 0.39 | 0.17 | -0.26 | -0.2 | -0.36 | 0.36 | -0.2 | 0.2 | 0.26 | -0.26 | 0.25 | -0.25 | -0.18 | 0.18 | 0.11 | -0.26 | 0.23 | -0.04 | -0.75 | 1 | -0.39 | -0.3 | 0.3 | 0.19 | -0.04 | -0.38 | 0.15 | -0.19 | -0.19 |
| rob_high | -0.05 | 0.06 | -0.04 | 0.03 | -0.02 | 0.02 | -0.15 | 0.15 | 0.02 | -0.02 | -0.1 | 0.1 | 0.51 | -0.51 | -0.29 | 0.37 | -0.09 | 0.07 | -0.32 | -0.39 | 1 | -0.19 | 0.19 | -0.25 | -0.11 | 0.05 | 0.21 | -0.13 | 0.26 |
| prereg | 0.02 | -0.17 | 0.06 | 0.07 | 0.08 | -0.08 | 0.1 | -0.1 | -0.03 | 0.03 | 0.17 | -0.17 | -0.41 | 0.41 | 0.04 | 0.2 | -0.32 | -0.13 | 0.45 | -0.3 | -0.19 | 1 | -1 | 0.34 | -0.21 | 0.03 | -0.27 | 0.13 | -0.19 |
| conventional | -0.02 | 0.17 | -0.06 | -0.07 | -0.08 | 0.08 | -0.1 | 0.1 | 0.03 | -0.03 | -0.17 | 0.17 | 0.41 | -0.41 | -0.04 | -0.2 | 0.32 | 0.13 | -0.45 | 0.3 | 0.19 | -1 | 1 | -0.34 | 0.21 | -0.03 | 0.27 | -0.13 | 0.19 |
| age | -0.26 | 0.12 | -0.17 | 0.27 | -0.21 | 0.21 | 0.04 | -0.04 | -0.19 | 0.19 | -0.15 | 0.15 | -0.12 | 0.12 | 0.02 | -0.11 | 0.24 | -0.14 | -0.01 | 0.19 | -0.25 | 0.34 | -0.34 | 1 | -0.01 | -0.29 | 0 | -0.01 | -0.24 |
| male | -0.37 | 0.17 | 0.02 | 0.13 | 0.5 | -0.5 | -0.32 | 0.32 | -0.37 | 0.37 | -0.02 | 0.02 | -0.06 | 0.06 | -0.07 | 0.03 | 0 | 0.14 | 0.12 | -0.04 | -0.11 | -0.21 | 0.21 | -0.01 | 1 | 0.24 | -0.01 | -0.09 | 0.1 |
| dur | 0.01 | -0.14 | 0.3 | -0.16 | 0.49 | -0.49 | -0.26 | 0.26 | -0.03 | 0.03 | 0.27 | -0.27 | 0.22 | -0.22 | 0.06 | -0.07 | -0.08 | 0.14 | 0.36 | -0.38 | 0.05 | 0.03 | -0.03 | -0.29 | 0.24 | 1 | -0.05 | 0.21 | 0.77 |
| int | 0.06 | -0.04 | -0.06 | 0.04 | -0.01 | 0.01 | -0.04 | 0.04 | 0.06 | -0.06 | -0.02 | 0.02 | 0.41 | -0.41 | -0.3 | 0.17 | 0.3 | 0 | -0.31 | 0.15 | 0.21 | -0.27 | 0.27 | 0 | -0.01 | -0.05 | 1 | -0.19 | 0.41 |
| FU | -0.05 | -0.13 | 0.19 | -0.02 | 0.06 | -0.06 | 0.2 | -0.2 | -0.02 | 0.02 | -0.07 | 0.07 | -0.07 | 0.07 | 0.28 | -0.24 | -0.09 | -0.08 | 0.28 | -0.19 | -0.13 | 0.13 | -0.13 | -0.01 | -0.09 | 0.21 | -0.19 | 1 | 0 |
| sess | 0.14 | -0.11 | 0.17 | -0.17 | 0.38 | -0.38 | -0.27 | 0.27 | 0.03 | -0.03 | 0.21 | -0.21 | 0.47 | -0.47 | -0.11 | 0.07 | 0.02 | 0.11 | 0.01 | -0.19 | 0.26 | -0.19 | 0.19 | -0.24 | 0.1 | 0.77 | 0.41 | 0 | 1 |
Excluded factors due to no variation: type of sample (schizophania vs. rest), low risk of bias.
Show the code
```{r correlation-matrix-alcohol}
#| tbl-cap: "Correlation matrix based on alcohol outcome only."
#| tbl-cap-location: top
#| label: tbl-cor-matix-alcohol
#| message: false
cor_mat_dat_cat_alcohol <-
reintegation_dat |>
filter(str_detect(analysis_plan, "Alco") & test_type != "Raw events") |>
select(
treat = CBT_int,
test = test_type,
str = analysis_strategy,
des = QES_design,
ctr = control,
rob = overall_rob,
pre = prereg_chr
)
cat_dummy_dat_alcohol <-
fastDummies::dummy_cols(cor_mat_dat_cat_alcohol) %>%
select(where(is.numeric))
cor_mat_dat_con_alcohol <-
reintegation_dat |>
filter(str_detect(analysis_plan, "Alco") & test_type != "Raw events") |>
select(
age = age_mean,
male = male_pct,
dur = duration_in_weeks,
int = sessions_per_week,
FU = time_after_end_intervention_weeks,
sess = total_number_of_sessions
)
cor_mat_dat_alcohol <-
bind_cols(cat_dummy_dat_alcohol, cor_mat_dat_con_alcohol) |>
select(
cbt_trt = treat_CBT,
oth_trt = treat_Other,
test_clin = `test_Clinician-rated measure`,
test_self = `test_Self-reported`,
itt = str_ITT,
tot = str_TOT,
qes = des_QES,
rct = des_RCT,
tau = ctr_TAU,
tau_wait = `ctr_TAU with Waiting-list`,
rob_mod = `rob_Some concerns/Moderate`,
rob_high = `rob_Serious/High`,
prereg = pre_Preregistered,
conventional = `pre_Not preregistered`,
age:sess
) |>
na.omit()
cor_mat_alcohol <-
cor(
model.matrix(
reformulate(names(cor_mat_dat_alcohol[,1:ncol(cor_mat_dat_alcohol)])),
data = cor_mat_dat_alcohol
)
) |>
as.data.frame() |>
select(-c(`(Intercept)`)) |>
na.omit() |>
mutate(
across(.cols = everything(), ~ round(.x, 2))
)
cor_mat_formatted_alcohol <-
cor_mat_alcohol |>
mutate(
across(.cols = everything(), ~ cell_spec(.x, bold = ifelse(abs(.x) > 0.5, T, F)))
)
kbl(
cor_mat_formatted_alcohol,
escape = F,
col.names = c("Category", colnames(cor_mat_alcohol))
) |>
kable_styling(
bootstrap_options = c("striped", "hover"),
font_size = 10
) |>
scroll_box(width = "100%", height = "100%", fixed_thead = TRUE)
```| Category | cbt_trt | oth_trt | test_clin | test_self | itt | tot | qes | rct | tau | tau_wait | rob_mod | rob_high | prereg | conventional | age | male | dur | int | FU | sess |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| cbt_trt | 1 | -1 | -0.33 | 0.33 | 0.09 | -0.09 | -0.07 | 0.07 | 0.12 | -0.12 | 0.09 | -0.09 | -0.48 | 0.48 | -0.5 | 0.16 | -0.17 | -0.12 | 0.27 | -0.13 |
| oth_trt | -1 | 1 | 0.33 | -0.33 | -0.09 | 0.09 | 0.07 | -0.07 | -0.12 | 0.12 | -0.09 | 0.09 | 0.48 | -0.48 | 0.5 | -0.16 | 0.17 | 0.12 | -0.27 | 0.13 |
| test_clin | -0.33 | 0.33 | 1 | -1 | 0.41 | -0.41 | -0.33 | 0.33 | 0.55 | -0.55 | 0.41 | -0.41 | 0.68 | -0.68 | 0.63 | -0.79 | -0.28 | -0.57 | 0.32 | -0.4 |
| test_self | 0.33 | -0.33 | -1 | 1 | -0.41 | 0.41 | 0.33 | -0.33 | -0.55 | 0.55 | -0.41 | 0.41 | -0.68 | 0.68 | -0.63 | 0.79 | 0.28 | 0.57 | -0.32 | 0.4 |
| itt | 0.09 | -0.09 | 0.41 | -0.41 | 1 | -1 | 0.09 | -0.09 | -0.15 | 0.15 | -0.11 | 0.11 | 0.6 | -0.6 | 0.64 | -0.59 | 0.41 | 0.15 | 0.1 | 0.25 |
| tot | -0.09 | 0.09 | -0.41 | 0.41 | -1 | 1 | -0.09 | 0.09 | 0.15 | -0.15 | 0.11 | -0.11 | -0.6 | 0.6 | -0.64 | 0.59 | -0.41 | -0.15 | -0.1 | -0.25 |
| qes | -0.07 | 0.07 | -0.33 | 0.33 | 0.09 | -0.09 | 1 | -1 | 0.12 | -0.12 | -0.8 | 0.8 | -0.48 | 0.48 | -0.24 | -0.17 | 0.89 | 0.81 | -0.23 | 0.94 |
| rct | 0.07 | -0.07 | 0.33 | -0.33 | -0.09 | 0.09 | -1 | 1 | -0.12 | 0.12 | 0.8 | -0.8 | 0.48 | -0.48 | 0.24 | 0.17 | -0.89 | -0.81 | 0.23 | -0.94 |
| tau | 0.12 | -0.12 | 0.55 | -0.55 | -0.15 | 0.15 | 0.12 | -0.12 | 1 | -1 | 0.15 | -0.15 | -0.25 | 0.25 | -0.18 | -0.56 | -0.22 | -0.42 | 0.38 | -0.18 |
| tau_wait | -0.12 | 0.12 | -0.55 | 0.55 | 0.15 | -0.15 | -0.12 | 0.12 | -1 | 1 | -0.15 | 0.15 | 0.25 | -0.25 | 0.18 | 0.56 | 0.22 | 0.42 | -0.38 | 0.18 |
| rob_mod | 0.09 | -0.09 | 0.41 | -0.41 | -0.11 | 0.11 | -0.8 | 0.8 | 0.15 | -0.15 | 1 | -1 | 0.34 | -0.34 | 0.37 | 0.19 | -0.76 | -0.62 | 0.28 | -0.76 |
| rob_high | -0.09 | 0.09 | -0.41 | 0.41 | 0.11 | -0.11 | 0.8 | -0.8 | -0.15 | 0.15 | -1 | 1 | -0.34 | 0.34 | -0.37 | -0.19 | 0.76 | 0.62 | -0.28 | 0.76 |
| prereg | -0.48 | 0.48 | 0.68 | -0.68 | 0.6 | -0.6 | -0.48 | 0.48 | -0.25 | 0.25 | 0.34 | -0.34 | 1 | -1 | 0.89 | -0.42 | -0.14 | -0.29 | 0.04 | -0.3 |
| conventional | 0.48 | -0.48 | -0.68 | 0.68 | -0.6 | 0.6 | 0.48 | -0.48 | 0.25 | -0.25 | -0.34 | 0.34 | -1 | 1 | -0.89 | 0.42 | 0.14 | 0.29 | -0.04 | 0.3 |
| age | -0.5 | 0.5 | 0.63 | -0.63 | 0.64 | -0.64 | -0.24 | 0.24 | -0.18 | 0.18 | 0.37 | -0.37 | 0.89 | -0.89 | 1 | -0.35 | 0.1 | 0 | 0 | -0.03 |
| male | 0.16 | -0.16 | -0.79 | 0.79 | -0.59 | 0.59 | -0.17 | 0.17 | -0.56 | 0.56 | 0.19 | -0.19 | -0.42 | 0.42 | -0.35 | 1 | -0.17 | 0.24 | -0.25 | -0.06 |
| dur | -0.17 | 0.17 | -0.28 | 0.28 | 0.41 | -0.41 | 0.89 | -0.89 | -0.22 | 0.22 | -0.76 | 0.76 | -0.14 | 0.14 | 0.1 | -0.17 | 1 | 0.91 | -0.3 | 0.98 |
| int | -0.12 | 0.12 | -0.57 | 0.57 | 0.15 | -0.15 | 0.81 | -0.81 | -0.42 | 0.42 | -0.62 | 0.62 | -0.29 | 0.29 | 0 | 0.24 | 0.91 | 1 | -0.39 | 0.94 |
| FU | 0.27 | -0.27 | 0.32 | -0.32 | 0.1 | -0.1 | -0.23 | 0.23 | 0.38 | -0.38 | 0.28 | -0.28 | 0.04 | -0.04 | 0 | -0.25 | -0.3 | -0.39 | 1 | -0.32 |
| sess | -0.13 | 0.13 | -0.4 | 0.4 | 0.25 | -0.25 | 0.94 | -0.94 | -0.18 | 0.18 | -0.76 | 0.76 | -0.3 | 0.3 | -0.03 | -0.06 | 0.98 | 0.94 | -0.32 | 1 |
Excluded factors due to no variation: type of intervention (CBT vs. rest) and type of test.
Show the code
```{r correlation-matrix-hope}
#| tbl-cap: "Correlation matrix based on hope, empowerment & self-efficacy outcomes only."
#| tbl-cap-location: top
#| label: tbl-cor-matix-hope
#| message: false
cor_mat_dat_cat_hope <-
reintegation_dat |>
filter(str_detect(analysis_plan, "Hope") & test_type != "Raw events") |>
select(
samp = schizophrenia,
treat = CBT_int,
test = test_type,
str = analysis_strategy,
des = QES_design,
ctr = control,
rob = overall_rob,
pre = prereg_chr
)
cat_dummy_dat_hope <-
fastDummies::dummy_cols(cor_mat_dat_cat_hope) %>%
select(where(is.numeric))
cor_mat_dat_con_hope <-
reintegation_dat |>
filter(str_detect(analysis_plan, "Hope") & test_type != "Raw events") |>
select(
age = age_mean,
male = male_pct,
dur = duration_in_weeks,
int = sessions_per_week,
FU = time_after_end_intervention_weeks,
sess = total_number_of_sessions
)
cor_mat_dat_hope <-
bind_cols(cat_dummy_dat_hope, cor_mat_dat_con_hope) |>
select(
s_schizo = samp_Schizophrenia,
s_oth = samp_Other,
itt = str_ITT,
tot = str_TOT,
qes = des_QES,
rct = des_RCT,
tau = ctr_TAU,
tau_wait = `ctr_TAU with Waiting-list`,
wait = `ctr_Waiting-list only`,
ind_trt = `ctr_Individual treatment` ,
rob_low = rob_Low,
rob_mod = `rob_Some concerns/Moderate`,
rob_high = `rob_Serious/High`,
prereg = pre_Preregistered,
conventional = `pre_Not preregistered`,
age:sess
) |>
na.omit()
cor_mat_hope <-
cor(
model.matrix(
reformulate(names(cor_mat_dat_hope[,1:ncol(cor_mat_dat_hope)])),
data = cor_mat_dat_hope
)
) |>
as.data.frame() |>
select(-c(`(Intercept)`)) |>
na.omit() |>
mutate(
across(.cols = everything(), ~ round(.x, 2))
)
cor_mat_formatted_hope <-
cor_mat_hope |>
mutate(
across(.cols = everything(), ~ cell_spec(.x, bold = ifelse(abs(.x) > 0.5, T, F)))
)
kbl(
cor_mat_formatted_hope,
escape = F,
col.names = c("Category", colnames(cor_mat_hope))
) |>
kable_styling(
bootstrap_options = c("striped", "hover"),
font_size = 10
) |>
scroll_box(width = "100%", height = "100%", fixed_thead = TRUE)
```| Category | s_schizo | s_oth | itt | tot | qes | rct | tau | tau_wait | wait | ind_trt | rob_low | rob_mod | rob_high | prereg | conventional | age | male | dur | int | FU | sess |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| s_schizo | 1 | -1 | 0.2 | -0.2 | -0.08 | 0.08 | 0.13 | -0.16 | -0.21 | 0.42 | 0.53 | -0.41 | 0.01 | 0.01 | -0.01 | -0.33 | 0.52 | -0.1 | 0.03 | -0.25 | -0.05 |
| s_oth | -1 | 1 | -0.2 | 0.2 | 0.08 | -0.08 | -0.13 | 0.16 | 0.21 | -0.42 | -0.53 | 0.41 | -0.01 | -0.01 | 0.01 | 0.33 | -0.52 | 0.1 | -0.03 | 0.25 | 0.05 |
| itt | 0.2 | -0.2 | 1 | -1 | 0.23 | -0.23 | 0.56 | -0.29 | -0.37 | -0.14 | 0.56 | -0.25 | -0.21 | -0.02 | 0.02 | -0.3 | 0.07 | 0.43 | -0.1 | -0.06 | 0.15 |
| tot | -0.2 | 0.2 | -1 | 1 | -0.23 | 0.23 | -0.56 | 0.29 | 0.37 | 0.14 | -0.56 | 0.25 | 0.21 | 0.02 | -0.02 | 0.3 | -0.07 | -0.43 | 0.1 | 0.06 | -0.15 |
| qes | -0.08 | 0.08 | 0.23 | -0.23 | 1 | -1 | 0.13 | -0.07 | -0.09 | -0.03 | -0.08 | -0.25 | 0.37 | -0.22 | 0.22 | -0.36 | -0.51 | 0.64 | 0.35 | -0.13 | 0.93 |
| rct | 0.08 | -0.08 | -0.23 | 0.23 | -1 | 1 | -0.13 | 0.07 | 0.09 | 0.03 | 0.08 | 0.25 | -0.37 | 0.22 | -0.22 | 0.36 | 0.51 | -0.64 | -0.35 | 0.13 | -0.93 |
| tau | 0.13 | -0.13 | 0.56 | -0.56 | 0.13 | -0.13 | 1 | -0.52 | -0.66 | -0.25 | 0.31 | 0.03 | -0.33 | 0.34 | -0.34 | -0.24 | 0.23 | 0.05 | -0.56 | 0.09 | -0.17 |
| tau_wait | -0.16 | 0.16 | -0.29 | 0.29 | -0.07 | 0.07 | -0.52 | 1 | -0.18 | -0.07 | -0.16 | -0.52 | 0.79 | 0.31 | -0.31 | 0.02 | -0.28 | -0.06 | 0.75 | -0.02 | 0.23 |
| wait | -0.21 | 0.21 | -0.37 | 0.37 | -0.09 | 0.09 | -0.66 | -0.18 | 1 | -0.09 | -0.21 | 0.35 | -0.23 | -0.58 | 0.58 | 0.27 | -0.21 | 0.01 | 0.04 | -0.03 | 0.02 |
| ind_trt | 0.42 | -0.42 | -0.14 | 0.14 | -0.03 | 0.03 | -0.25 | -0.07 | -0.09 | 1 | -0.08 | 0.13 | -0.09 | -0.22 | 0.22 | 0.02 | 0.37 | -0.03 | 0.01 | -0.13 | -0.01 |
| rob_low | 0.53 | -0.53 | 0.56 | -0.56 | -0.08 | 0.08 | 0.31 | -0.16 | -0.21 | -0.08 | 1 | -0.59 | -0.21 | 0.36 | -0.36 | -0.22 | 0.34 | 0.36 | -0.27 | 0.1 | -0.14 |
| rob_mod | -0.41 | 0.41 | -0.25 | 0.25 | -0.25 | 0.25 | 0.03 | -0.52 | 0.35 | 0.13 | -0.59 | 1 | -0.66 | -0.33 | 0.33 | 0.52 | 0.02 | -0.45 | -0.45 | 0.03 | -0.39 |
| rob_high | 0.01 | -0.01 | -0.21 | 0.21 | 0.37 | -0.37 | -0.33 | 0.79 | -0.23 | -0.09 | -0.21 | -0.66 | 1 | 0.07 | -0.07 | -0.43 | -0.34 | 0.22 | 0.8 | -0.13 | 0.6 |
| prereg | 0.01 | -0.01 | -0.02 | 0.02 | -0.22 | 0.22 | 0.34 | 0.31 | -0.58 | -0.22 | 0.36 | -0.33 | 0.07 | 1 | -1 | 0.3 | 0.04 | -0.24 | -0.13 | 0.32 | -0.31 |
| conventional | -0.01 | 0.01 | 0.02 | -0.02 | 0.22 | -0.22 | -0.34 | -0.31 | 0.58 | 0.22 | -0.36 | 0.33 | -0.07 | -1 | 1 | -0.3 | -0.04 | 0.24 | 0.13 | -0.32 | 0.31 |
| age | -0.33 | 0.33 | -0.3 | 0.3 | -0.36 | 0.36 | -0.24 | 0.02 | 0.27 | 0.02 | -0.22 | 0.52 | -0.43 | 0.3 | -0.3 | 1 | -0.04 | -0.57 | -0.08 | 0.19 | -0.38 |
| male | 0.52 | -0.52 | 0.07 | -0.07 | -0.51 | 0.51 | 0.23 | -0.28 | -0.21 | 0.37 | 0.34 | 0.02 | -0.34 | 0.04 | -0.04 | -0.04 | 1 | -0.19 | -0.49 | -0.02 | -0.57 |
| dur | -0.1 | 0.1 | 0.43 | -0.43 | 0.64 | -0.64 | 0.05 | -0.06 | 0.01 | -0.03 | 0.36 | -0.45 | 0.22 | -0.24 | 0.24 | -0.57 | -0.19 | 1 | 0.04 | 0.04 | 0.61 |
| int | 0.03 | -0.03 | -0.1 | 0.1 | 0.35 | -0.35 | -0.56 | 0.75 | 0.04 | 0.01 | -0.27 | -0.45 | 0.8 | -0.13 | 0.13 | -0.08 | -0.49 | 0.04 | 1 | -0.27 | 0.65 |
| FU | -0.25 | 0.25 | -0.06 | 0.06 | -0.13 | 0.13 | 0.09 | -0.02 | -0.03 | -0.13 | 0.1 | 0.03 | -0.13 | 0.32 | -0.32 | 0.19 | -0.02 | 0.04 | -0.27 | 1 | -0.22 |
| sess | -0.05 | 0.05 | 0.15 | -0.15 | 0.93 | -0.93 | -0.17 | 0.23 | 0.02 | -0.01 | -0.14 | -0.39 | 0.6 | -0.31 | 0.31 | -0.38 | -0.57 | 0.61 | 0.65 | -0.22 | 1 |
Excluded factors due to no appearance: waitlist-only
Show the code
```{r correlation-matrix-social}
#| tbl-cap: "Correlation matrix based on social functioning outcomes only."
#| tbl-cap-location: top
#| label: tbl-cor-matix-social
#| message: false
cor_mat_dat_cat_social <-
reintegation_dat |>
filter(str_detect(analysis_plan, "Social") & test_type != "Raw events") |>
select(
samp = schizophrenia,
treat = CBT_int,
test = test_type,
str = analysis_strategy,
des = QES_design,
ctr = control,
rob = overall_rob,
pre = prereg_chr
)
cat_dummy_dat_social <-
fastDummies::dummy_cols(cor_mat_dat_cat_social) %>%
select(where(is.numeric))
cor_mat_dat_con_social <-
reintegation_dat |>
filter(str_detect(analysis_plan, "Social") & test_type != "Raw events") |>
select(
age = age_mean,
male = male_pct,
dur = duration_in_weeks,
int = sessions_per_week,
FU = time_after_end_intervention_weeks,
sess = total_number_of_sessions
)
cor_mat_dat_social <-
bind_cols(cat_dummy_dat_social, cor_mat_dat_con_social) |>
select(
s_schizo = samp_Schizophrenia,
s_oth = samp_Other,
cbt_trt = treat_CBT,
oth_trt = treat_Other,
test_clin = `test_Clinician-rated measure`,
test_self = `test_Self-reported`,
itt = str_ITT,
tot = str_TOT,
qes = des_QES,
rct = des_RCT,
tau = ctr_TAU,
tau_wait = `ctr_TAU with Waiting-list`,
ind_trt = `ctr_Individual treatment` ,
rob_low = rob_Low,
rob_mod = `rob_Some concerns/Moderate`,
rob_high = `rob_Serious/High`,
prereg = pre_Preregistered,
conventional = `pre_Not preregistered`,
everything()
) |>
na.omit()
cor_mat_social <-
cor(
model.matrix(
reformulate(names(cor_mat_dat_social[,1:ncol(cor_mat_dat_social)])),
data = cor_mat_dat_social
)
) |>
as.data.frame() |>
select(-c(`(Intercept)`)) |>
na.omit() |>
mutate(
across(.cols = everything(), ~ round(.x, 2))
)
cor_mat_formatted_social <-
cor_mat_social |>
mutate(
across(.cols = everything(), ~ cell_spec(.x, bold = ifelse(abs(.x) > 0.5, T, F)))
)
kbl(
cor_mat_formatted_social,
escape = F,
col.names = c("Category", colnames(cor_mat_social))
) |>
kable_styling(
bootstrap_options = c("striped", "hover"),
font_size = 10
) |>
scroll_box(width = "100%", height = "100%", fixed_thead = TRUE)
```Excluded factors due to no appearance: waitlist-only
Show the code
```{r correlation-matrix-wellbeing}
#| tbl-cap: "Correlation matrix based on wellbeing and quality of life outcomes only."
#| tbl-cap-location: top
#| label: tbl-cor-matix-wellbeing
#| message: false
cor_mat_dat_cat_well <-
reintegation_dat |>
filter(str_detect(analysis_plan, "Well") & test_type != "Raw events") |>
select(
samp = schizophrenia,
treat = CBT_int,
test = test_type,
str = analysis_strategy,
des = QES_design,
ctr = control,
rob = overall_rob,
pre = prereg_chr
)
cat_dummy_dat_well <-
fastDummies::dummy_cols(cor_mat_dat_cat_well) %>%
select(where(is.numeric))
cor_mat_dat_con_well <-
reintegation_dat |>
filter(str_detect(analysis_plan, "Well") & test_type != "Raw events") |>
select(
age = age_mean,
male = male_pct,
dur = duration_in_weeks,
int = sessions_per_week,
FU = time_after_end_intervention_weeks,
sess = total_number_of_sessions
)
cor_mat_dat_well <-
bind_cols(cat_dummy_dat_well, cor_mat_dat_con_well) |>
select(
s_schizo = samp_Schizophrenia,
s_oth = samp_Other,
cbt_trt = treat_CBT,
oth_trt = treat_Other,
test_clin = `test_Clinician-rated measure`,
test_self = `test_Self-reported`,
itt = str_ITT,
tot = str_TOT,
qes = des_QES,
rct = des_RCT,
tau = ctr_TAU,
tau_wait = `ctr_TAU with Waiting-list`,
wait = `ctr_Waiting-list only`,
ind_trt = `ctr_Individual treatment` ,
rob_low = rob_Low,
rob_mod = `rob_Some concerns/Moderate`,
rob_high = `rob_Serious/High`,
prereg = pre_Preregistered,
conventional = `pre_Not preregistered`,
everything()
) |>
na.omit()
cor_mat_well <-
cor(
model.matrix(
reformulate(names(cor_mat_dat_well[,1:ncol(cor_mat_dat_well)])),
data = cor_mat_dat_well
)
) |>
as.data.frame() |>
select(-c(`(Intercept)`)) |>
na.omit() |>
mutate(
across(.cols = everything(), ~ round(.x, 2))
)
cor_mat_formatted_well <-
cor_mat_well |>
mutate(
across(.cols = everything(), ~ cell_spec(.x, bold = ifelse(abs(.x) > 0.5, T, F)))
)
kbl(
cor_mat_formatted_well,
escape = F,
col.names = c("Category", colnames(cor_mat_well))
) |>
kable_styling(
bootstrap_options = c("striped", "hover"),
font_size = 10
) |>
scroll_box(width = "100%", height = "100%", fixed_thead = TRUE)
```| Category | s_schizo | s_oth | cbt_trt | oth_trt | test_clin | test_self | itt | tot | qes | rct | tau | tau_wait | wait | ind_trt | rob_low | rob_mod | rob_high | prereg | conventional | age | male | dur | int | FU | sess |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| s_schizo | 1 | -1 | -0.32 | 0.32 | 0.17 | -0.17 | 0.22 | -0.22 | 0.07 | -0.07 | 0.18 | -0.15 | -0.07 | -0.05 | 0.19 | -0.28 | 0.1 | -0.03 | 0.03 | -0.36 | 0.52 | 0.54 | -0.02 | 0.07 | 0.51 |
| s_oth | -1 | 1 | 0.32 | -0.32 | -0.17 | 0.17 | -0.22 | 0.22 | -0.07 | 0.07 | -0.18 | 0.15 | 0.07 | 0.05 | -0.19 | 0.28 | -0.1 | 0.03 | -0.03 | 0.36 | -0.52 | -0.54 | 0.02 | -0.07 | -0.51 |
| cbt_trt | -0.32 | 0.32 | 1 | -1 | -0.09 | 0.09 | -0.28 | 0.28 | -0.01 | 0.01 | 0.16 | -0.34 | 0.21 | 0.15 | 0.17 | -0.04 | -0.19 | 0.14 | -0.14 | -0.01 | -0.72 | -0.24 | -0.01 | 0.27 | -0.26 |
| oth_trt | 0.32 | -0.32 | -1 | 1 | 0.09 | -0.09 | 0.28 | -0.28 | 0.01 | -0.01 | -0.16 | 0.34 | -0.21 | -0.15 | -0.17 | 0.04 | 0.19 | -0.14 | 0.14 | 0.01 | 0.72 | 0.24 | 0.01 | -0.27 | 0.26 |
| test_clin | 0.17 | -0.17 | -0.09 | 0.09 | 1 | -1 | -0.12 | 0.12 | 0.27 | -0.27 | 0.17 | -0.14 | -0.06 | -0.04 | -0.34 | 0.05 | 0.4 | -0.42 | 0.42 | -0.25 | 0.24 | -0.15 | 0.1 | -0.15 | 0.04 |
| test_self | -0.17 | 0.17 | 0.09 | -0.09 | -1 | 1 | 0.12 | -0.12 | -0.27 | 0.27 | -0.17 | 0.14 | 0.06 | 0.04 | 0.34 | -0.05 | -0.4 | 0.42 | -0.42 | 0.25 | -0.24 | 0.15 | -0.1 | 0.15 | -0.04 |
| itt | 0.22 | -0.22 | -0.28 | 0.28 | -0.12 | 0.12 | 1 | -1 | -0.27 | 0.27 | 0.44 | -0.37 | -0.16 | -0.12 | -0.42 | 0.54 | -0.14 | 0.03 | -0.03 | 0.03 | 0.26 | 0.22 | -0.09 | -0.05 | 0.11 |
| tot | -0.22 | 0.22 | 0.28 | -0.28 | 0.12 | -0.12 | -1 | 1 | 0.27 | -0.27 | -0.44 | 0.37 | 0.16 | 0.12 | 0.42 | -0.54 | 0.14 | -0.03 | 0.03 | -0.03 | -0.26 | -0.22 | 0.09 | 0.05 | -0.11 |
| qes | 0.07 | -0.07 | -0.01 | 0.01 | 0.27 | -0.27 | -0.27 | 0.27 | 1 | -1 | -0.16 | -0.12 | 0.28 | 0.43 | -0.28 | -0.09 | 0.52 | -0.55 | 0.55 | -0.11 | 0.07 | -0.14 | 0.47 | -0.17 | 0.21 |
| rct | -0.07 | 0.07 | 0.01 | -0.01 | -0.27 | 0.27 | 0.27 | -0.27 | -1 | 1 | 0.16 | 0.12 | -0.28 | -0.43 | 0.28 | 0.09 | -0.52 | 0.55 | -0.55 | 0.11 | -0.07 | 0.14 | -0.47 | 0.17 | -0.21 |
| tau | 0.18 | -0.18 | 0.16 | -0.16 | 0.17 | -0.17 | 0.44 | -0.44 | -0.16 | 0.16 | 1 | -0.84 | -0.37 | -0.26 | -0.09 | 0.19 | -0.13 | -0.06 | 0.06 | -0.05 | -0.17 | 0.18 | -0.34 | 0.26 | -0.13 |
| tau_wait | -0.15 | 0.15 | -0.34 | 0.34 | -0.14 | 0.14 | -0.37 | 0.37 | -0.12 | 0.12 | -0.84 | 1 | -0.07 | -0.05 | 0.23 | -0.3 | 0.08 | 0.21 | -0.21 | -0.05 | 0.26 | -0.13 | 0.05 | -0.22 | 0 |
| wait | -0.07 | 0.07 | 0.21 | -0.21 | -0.06 | 0.06 | -0.16 | 0.16 | 0.28 | -0.28 | -0.37 | -0.07 | 1 | -0.02 | -0.18 | 0.24 | -0.08 | -0.12 | 0.12 | 0.31 | -0.09 | -0.09 | 0.67 | -0.11 | 0.32 |
| ind_trt | -0.05 | 0.05 | 0.15 | -0.15 | -0.04 | 0.04 | -0.12 | 0.12 | 0.43 | -0.43 | -0.26 | -0.05 | -0.02 | 1 | -0.12 | -0.09 | 0.29 | -0.24 | 0.24 | -0.13 | -0.05 | -0.05 | -0.01 | -0.05 | -0.04 |
| rob_low | 0.19 | -0.19 | 0.17 | -0.17 | -0.34 | 0.34 | -0.42 | 0.42 | -0.28 | 0.28 | -0.09 | 0.23 | -0.18 | -0.12 | 1 | -0.73 | -0.42 | 0.52 | -0.52 | -0.18 | -0.13 | 0.41 | -0.31 | 0.33 | -0.01 |
| rob_mod | -0.28 | 0.28 | -0.04 | 0.04 | 0.05 | -0.05 | 0.54 | -0.54 | -0.09 | 0.09 | 0.19 | -0.3 | 0.24 | -0.09 | -0.73 | 1 | -0.32 | -0.32 | 0.32 | 0.33 | 0.09 | -0.27 | 0.26 | -0.27 | 0.03 |
| rob_high | 0.1 | -0.1 | -0.19 | 0.19 | 0.4 | -0.4 | -0.14 | 0.14 | 0.52 | -0.52 | -0.13 | 0.08 | -0.08 | 0.29 | -0.42 | -0.32 | 1 | -0.3 | 0.3 | -0.18 | 0.06 | -0.21 | 0.08 | -0.1 | -0.03 |
| prereg | -0.03 | 0.03 | 0.14 | -0.14 | -0.42 | 0.42 | 0.03 | -0.03 | -0.55 | 0.55 | -0.06 | 0.21 | -0.12 | -0.24 | 0.52 | -0.32 | -0.3 | 1 | -1 | 0.36 | -0.37 | 0.05 | -0.35 | 0.2 | -0.27 |
| conventional | 0.03 | -0.03 | -0.14 | 0.14 | 0.42 | -0.42 | -0.03 | 0.03 | 0.55 | -0.55 | 0.06 | -0.21 | 0.12 | 0.24 | -0.52 | 0.32 | 0.3 | -1 | 1 | -0.36 | 0.37 | -0.05 | 0.35 | -0.2 | 0.27 |
| age | -0.36 | 0.36 | -0.01 | 0.01 | -0.25 | 0.25 | 0.03 | -0.03 | -0.11 | 0.11 | -0.05 | -0.05 | 0.31 | -0.13 | -0.18 | 0.33 | -0.18 | 0.36 | -0.36 | 1 | -0.19 | -0.28 | 0.03 | -0.12 | -0.14 |
| male | 0.52 | -0.52 | -0.72 | 0.72 | 0.24 | -0.24 | 0.26 | -0.26 | 0.07 | -0.07 | -0.17 | 0.26 | -0.09 | -0.05 | -0.13 | 0.09 | 0.06 | -0.37 | 0.37 | -0.19 | 1 | 0.39 | -0.02 | -0.28 | 0.38 |
| dur | 0.54 | -0.54 | -0.24 | 0.24 | -0.15 | 0.15 | 0.22 | -0.22 | -0.14 | 0.14 | 0.18 | -0.13 | -0.09 | -0.05 | 0.41 | -0.27 | -0.21 | 0.05 | -0.05 | -0.28 | 0.39 | 1 | -0.15 | 0.26 | 0.62 |
| int | -0.02 | 0.02 | -0.01 | 0.01 | 0.1 | -0.1 | -0.09 | 0.09 | 0.47 | -0.47 | -0.34 | 0.05 | 0.67 | -0.01 | -0.31 | 0.26 | 0.08 | -0.35 | 0.35 | 0.03 | -0.02 | -0.15 | 1 | -0.18 | 0.56 |
| FU | 0.07 | -0.07 | 0.27 | -0.27 | -0.15 | 0.15 | -0.05 | 0.05 | -0.17 | 0.17 | 0.26 | -0.22 | -0.11 | -0.05 | 0.33 | -0.27 | -0.1 | 0.2 | -0.2 | -0.12 | -0.28 | 0.26 | -0.18 | 1 | 0.03 |
| sess | 0.51 | -0.51 | -0.26 | 0.26 | 0.04 | -0.04 | 0.11 | -0.11 | 0.21 | -0.21 | -0.13 | 0 | 0.32 | -0.04 | -0.01 | 0.03 | -0.03 | -0.27 | 0.27 | -0.14 | 0.38 | 0.62 | 0.56 | 0.03 | 1 |
Show the code
```{r correlation-matrix-mental}
#| tbl-cap: "Correlation matrix across all mental health outcomes."
#| tbl-cap-location: top
#| label: tbl-cor-matix-mental
#| message: false
cor_mat_dat_cat_mental <-
mental_health_dat |>
filter(test_type != "Raw events") |>
select(
plan = analysis_plan,
samp = schizophrenia,
treat = CBT_int,
test = test_type,
str = analysis_strategy,
des = QES_design,
ctr = control,
rob = overall_rob,
pre = prereg_chr
)
cat_dummy_dat_mental <-
fastDummies::dummy_cols(cor_mat_dat_cat_mental) %>%
select(where(is.numeric))
cor_mat_dat_con_mental <-
mental_health_dat |>
filter(test_type != "Raw events") |>
select(
age = age_mean,
male = male_pct,
dur = duration_in_weeks,
int = sessions_per_week,
FU = time_after_end_intervention_weeks,
sess = total_number_of_sessions
)
cor_mat_dat_mental <-
bind_cols(cat_dummy_dat_mental, cor_mat_dat_con_mental) |>
select(
anxiety = plan_Anxiety,
depress = plan_Depression,
g_mental = `plan_General mental health`,
symptoms = `plan_Symptoms of psychosis`,
s_schizo = samp_Schizophrenia,
s_oth = samp_Other,
cbt_trt = treat_CBT,
oth_trt = treat_Other,
test_clin = `test_Clinician-rated measure`,
test_self = `test_Self-reported`,
itt = str_ITT,
tot = str_TOT,
qes = des_QES,
rct = des_RCT,
tau = ctr_TAU,
tau_wait = `ctr_TAU with Waiting-list`,
wait = `ctr_Waiting-list only`,
ind_trt = `ctr_Individual treatment` ,
rob_low = rob_Low,
rob_mod = `rob_Some concerns/Moderate`,
rob_high = `rob_Serious/High`,
prereg = pre_Preregistered,
conventional = `pre_Not preregistered`,
everything()
) |>
na.omit()
cor_mat_mental <-
cor(
model.matrix(
reformulate(names(cor_mat_dat_mental[,1:ncol(cor_mat_dat_mental)])),
data = cor_mat_dat_mental
)
) %>%
as.data.frame() %>%
select(-c(`(Intercept)`)) %>%
na.omit() |>
mutate(
across(.cols = everything(), ~ round(.x, 2))
)
cor_mat_formatted_mental <-
cor_mat_mental |>
mutate(
across(.cols = everything(), ~ cell_spec(.x, bold = ifelse(abs(.x) > 0.5, T, F)))
)
kbl(
cor_mat_formatted_mental,
escape = F,
col.names = c("Category", colnames(cor_mat_mental))
) |>
kable_styling(
bootstrap_options = c("striped", "hover"),
font_size = 10
) |>
scroll_box(width = "100%", height = "100%", fixed_thead = TRUE)
```| Category | anxiety | depress | g_mental | symptoms | s_schizo | s_oth | cbt_trt | oth_trt | test_clin | test_self | itt | tot | qes | rct | tau | tau_wait | wait | ind_trt | rob_low | rob_mod | rob_high | prereg | conventional | age | male | dur | int | FU | sess |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| anxiety | 1 | -0.2 | -0.33 | -0.14 | -0.09 | 0.09 | 0.32 | -0.32 | -0.11 | 0.11 | -0.14 | 0.14 | -0.05 | 0.05 | -0.16 | -0.01 | 0.25 | 0.11 | 0.08 | -0.09 | 0.02 | 0.13 | -0.13 | 0.22 | -0.03 | -0.06 | -0.07 | -0.03 | -0.13 |
| depress | -0.2 | 1 | -0.58 | -0.25 | -0.16 | 0.16 | 0.04 | -0.04 | -0.13 | 0.13 | -0.02 | 0.02 | -0.02 | 0.02 | 0.09 | -0.17 | 0.09 | 0.03 | -0.15 | 0.19 | -0.07 | -0.02 | 0.02 | 0.13 | -0.11 | -0.11 | 0 | 0.01 | -0.1 |
| g_mental | -0.33 | -0.58 | 1 | -0.41 | -0.11 | 0.11 | -0.08 | 0.08 | -0.1 | 0.1 | 0.19 | -0.19 | -0.15 | 0.15 | -0.15 | 0.29 | -0.16 | -0.05 | 0.1 | -0.03 | -0.06 | 0.16 | -0.16 | -0.27 | -0.12 | 0.01 | -0.01 | -0.01 | 0.01 |
| symptoms | -0.14 | -0.25 | -0.41 | 1 | 0.43 | -0.43 | -0.21 | 0.21 | 0.39 | -0.39 | -0.13 | 0.13 | 0.27 | -0.27 | 0.23 | -0.18 | -0.1 | -0.06 | -0.01 | -0.11 | 0.16 | -0.31 | 0.31 | 0.03 | 0.33 | 0.17 | 0.08 | 0.03 | 0.22 |
| s_schizo | -0.09 | -0.16 | -0.11 | 0.43 | 1 | -1 | -0.2 | 0.2 | 0 | 0 | 0.12 | -0.12 | 0.07 | -0.07 | 0.09 | -0.12 | -0.06 | 0.15 | 0.35 | -0.31 | 0.01 | 0.12 | -0.12 | -0.18 | 0.34 | 0.46 | -0.06 | 0.04 | 0.31 |
| s_oth | 0.09 | 0.16 | 0.11 | -0.43 | -1 | 1 | 0.2 | -0.2 | 0 | 0 | -0.12 | 0.12 | -0.07 | 0.07 | -0.09 | 0.12 | 0.06 | -0.15 | -0.35 | 0.31 | -0.01 | -0.12 | 0.12 | 0.18 | -0.34 | -0.46 | 0.06 | -0.04 | -0.31 |
| cbt_trt | 0.32 | 0.04 | -0.08 | -0.21 | -0.2 | 0.2 | 1 | -1 | 0.01 | -0.01 | -0.02 | 0.02 | -0.08 | 0.08 | -0.12 | -0.1 | 0.33 | 0.11 | 0.09 | -0.03 | -0.06 | 0.17 | -0.17 | 0.17 | -0.08 | -0.32 | 0.15 | 0.13 | -0.24 |
| oth_trt | -0.32 | -0.04 | 0.08 | 0.21 | 0.2 | -0.2 | -1 | 1 | -0.01 | 0.01 | 0.02 | -0.02 | 0.08 | -0.08 | 0.12 | 0.1 | -0.33 | -0.11 | -0.09 | 0.03 | 0.06 | -0.17 | 0.17 | -0.17 | 0.08 | 0.32 | -0.15 | -0.13 | 0.24 |
| test_clin | -0.11 | -0.13 | -0.1 | 0.39 | 0 | 0 | 0.01 | -0.01 | 1 | -1 | 0.03 | -0.03 | 0.05 | -0.05 | 0.24 | -0.28 | 0.07 | -0.1 | -0.27 | 0.22 | 0.01 | -0.21 | 0.21 | 0.15 | 0.08 | -0.07 | 0.04 | -0.01 | 0.03 |
| test_self | 0.11 | 0.13 | 0.1 | -0.39 | 0 | 0 | -0.01 | 0.01 | -1 | 1 | -0.03 | 0.03 | -0.05 | 0.05 | -0.24 | 0.28 | -0.07 | 0.1 | 0.27 | -0.22 | -0.01 | 0.21 | -0.21 | -0.15 | -0.08 | 0.07 | -0.04 | 0.01 | -0.03 |
| itt | -0.14 | -0.02 | 0.19 | -0.13 | 0.12 | -0.12 | -0.02 | 0.02 | 0.03 | -0.03 | 1 | -1 | -0.19 | 0.19 | 0.33 | -0.19 | -0.23 | -0.15 | -0.2 | 0.26 | -0.1 | 0.25 | -0.25 | -0.32 | -0.22 | 0.16 | -0.14 | 0.03 | 0.03 |
| tot | 0.14 | 0.02 | -0.19 | 0.13 | -0.12 | 0.12 | 0.02 | -0.02 | -0.03 | 0.03 | -1 | 1 | 0.19 | -0.19 | -0.33 | 0.19 | 0.23 | 0.15 | 0.2 | -0.26 | 0.1 | -0.25 | 0.25 | 0.32 | 0.22 | -0.16 | 0.14 | -0.03 | -0.03 |
| qes | -0.05 | -0.02 | -0.15 | 0.27 | 0.07 | -0.07 | -0.08 | 0.08 | 0.05 | -0.05 | -0.19 | 0.19 | 1 | -1 | 0 | -0.16 | 0.11 | 0.25 | -0.22 | -0.33 | 0.67 | -0.45 | 0.45 | -0.08 | 0.03 | 0.15 | 0.39 | -0.13 | 0.42 |
| rct | 0.05 | 0.02 | 0.15 | -0.27 | -0.07 | 0.07 | 0.08 | -0.08 | -0.05 | 0.05 | 0.19 | -0.19 | -1 | 1 | 0 | 0.16 | -0.11 | -0.25 | 0.22 | 0.33 | -0.67 | 0.45 | -0.45 | 0.08 | -0.03 | -0.15 | -0.39 | 0.13 | -0.42 |
| tau | -0.16 | 0.09 | -0.15 | 0.23 | 0.09 | -0.09 | -0.12 | 0.12 | 0.24 | -0.24 | 0.33 | -0.33 | 0 | 0 | 1 | -0.79 | -0.42 | -0.27 | -0.16 | 0.31 | -0.22 | -0.14 | 0.14 | -0.07 | -0.05 | 0.08 | -0.21 | 0.24 | -0.04 |
| tau_wait | -0.01 | -0.17 | 0.29 | -0.18 | -0.12 | 0.12 | -0.1 | 0.1 | -0.28 | 0.28 | -0.19 | 0.19 | -0.16 | 0.16 | -0.79 | 1 | -0.1 | -0.06 | 0.25 | -0.41 | 0.25 | 0.16 | -0.16 | -0.2 | 0.03 | -0.11 | -0.02 | -0.16 | -0.08 |
| wait | 0.25 | 0.09 | -0.16 | -0.1 | -0.06 | 0.06 | 0.33 | -0.33 | 0.07 | -0.07 | -0.23 | 0.23 | 0.11 | -0.11 | -0.42 | -0.1 | 1 | -0.03 | -0.13 | 0.2 | -0.11 | 0.06 | -0.06 | 0.55 | 0 | -0.1 | 0.46 | -0.14 | 0.12 |
| ind_trt | 0.11 | 0.03 | -0.05 | -0.06 | 0.15 | -0.15 | 0.11 | -0.11 | -0.1 | 0.1 | -0.15 | 0.15 | 0.25 | -0.25 | -0.27 | -0.06 | -0.03 | 1 | 0.03 | -0.17 | 0.18 | -0.08 | 0.08 | -0.14 | 0.06 | 0.2 | -0.03 | -0.06 | 0.13 |
| rob_low | 0.08 | -0.15 | 0.1 | -0.01 | 0.35 | -0.35 | 0.09 | -0.09 | -0.27 | 0.27 | -0.2 | 0.2 | -0.22 | 0.22 | -0.16 | 0.25 | -0.13 | 0.03 | 1 | -0.66 | -0.28 | 0.48 | -0.48 | 0.02 | 0.1 | 0.3 | -0.24 | 0.19 | -0.02 |
| rob_mod | -0.09 | 0.19 | -0.03 | -0.11 | -0.31 | 0.31 | -0.03 | 0.03 | 0.22 | -0.22 | 0.26 | -0.26 | -0.33 | 0.33 | 0.31 | -0.41 | 0.2 | -0.17 | -0.66 | 1 | -0.54 | -0.19 | 0.19 | 0.13 | -0.05 | -0.31 | 0.16 | -0.05 | -0.15 |
| rob_high | 0.02 | -0.07 | -0.06 | 0.16 | 0.01 | -0.01 | -0.06 | 0.06 | 0.01 | -0.01 | -0.1 | 0.1 | 0.67 | -0.67 | -0.22 | 0.25 | -0.11 | 0.18 | -0.28 | -0.54 | 1 | -0.28 | 0.28 | -0.19 | -0.05 | 0.07 | 0.07 | -0.14 | 0.22 |
| prereg | 0.13 | -0.02 | 0.16 | -0.31 | 0.12 | -0.12 | 0.17 | -0.17 | -0.21 | 0.21 | 0.25 | -0.25 | -0.45 | 0.45 | -0.14 | 0.16 | 0.06 | -0.08 | 0.48 | -0.19 | -0.28 | 1 | -1 | 0.29 | -0.21 | 0 | -0.27 | 0.08 | -0.25 |
| conventional | -0.13 | 0.02 | -0.16 | 0.31 | -0.12 | 0.12 | -0.17 | 0.17 | 0.21 | -0.21 | -0.25 | 0.25 | 0.45 | -0.45 | 0.14 | -0.16 | -0.06 | 0.08 | -0.48 | 0.19 | 0.28 | -1 | 1 | -0.29 | 0.21 | 0 | 0.27 | -0.08 | 0.25 |
| age | 0.22 | 0.13 | -0.27 | 0.03 | -0.18 | 0.18 | 0.17 | -0.17 | 0.15 | -0.15 | -0.32 | 0.32 | -0.08 | 0.08 | -0.07 | -0.2 | 0.55 | -0.14 | 0.02 | 0.13 | -0.19 | 0.29 | -0.29 | 1 | 0.05 | -0.21 | 0.1 | -0.09 | -0.1 |
| male | -0.03 | -0.11 | -0.12 | 0.33 | 0.34 | -0.34 | -0.08 | 0.08 | 0.08 | -0.08 | -0.22 | 0.22 | 0.03 | -0.03 | -0.05 | 0.03 | 0 | 0.06 | 0.1 | -0.05 | -0.05 | -0.21 | 0.21 | 0.05 | 1 | 0.1 | 0 | -0.14 | 0 |
| dur | -0.06 | -0.11 | 0.01 | 0.17 | 0.46 | -0.46 | -0.32 | 0.32 | -0.07 | 0.07 | 0.16 | -0.16 | 0.15 | -0.15 | 0.08 | -0.11 | -0.1 | 0.2 | 0.3 | -0.31 | 0.07 | 0 | 0 | -0.21 | 0.1 | 1 | -0.15 | 0.18 | 0.72 |
| int | -0.07 | 0 | -0.01 | 0.08 | -0.06 | 0.06 | 0.15 | -0.15 | 0.04 | -0.04 | -0.14 | 0.14 | 0.39 | -0.39 | -0.21 | -0.02 | 0.46 | -0.03 | -0.24 | 0.16 | 0.07 | -0.27 | 0.27 | 0.1 | 0 | -0.15 | 1 | -0.17 | 0.43 |
| FU | -0.03 | 0.01 | -0.01 | 0.03 | 0.04 | -0.04 | 0.13 | -0.13 | -0.01 | 0.01 | 0.03 | -0.03 | -0.13 | 0.13 | 0.24 | -0.16 | -0.14 | -0.06 | 0.19 | -0.05 | -0.14 | 0.08 | -0.08 | -0.09 | -0.14 | 0.18 | -0.17 | 1 | -0.02 |
| sess | -0.13 | -0.1 | 0.01 | 0.22 | 0.31 | -0.31 | -0.24 | 0.24 | 0.03 | -0.03 | 0.03 | -0.03 | 0.42 | -0.42 | -0.04 | -0.08 | 0.12 | 0.13 | -0.02 | -0.15 | 0.22 | -0.25 | 0.25 | -0.1 | 0 | 0.72 | 0.43 | -0.02 | 1 |
Standard Errors and Other Auxiliary Data
SE forest plot
This forest plot shows the within- and between study variation of standard error of effect size estimates for reintegrational outcomes.
Show the code
```{r se-plot-reintegration}
#| label: fig-forset-plot-se
#| fig-cap: "Forest plot of standard error of reintegrational effect size estimates."
#| fig.width: 6.8
#| fig.height: 7
#| fig.retina: 2
#| fig.topcaption: TRUE
#| message: false
reintegation_dat |>
arrange(desc(study)) |>
mutate(
study = factor(study, unique(study)),
segt_pop = sqrt(vgt_pop)
) |>
ggplot(aes(x = segt_pop, y = study, color = study)) +
geom_point(aes(size = N_total), alpha = 0.5) +
scale_y_discrete() +
theme_minimal() +
labs(y = "", x = "SE") +
theme(legend.position = "none", axis.text.y = element_text(size = 10))
```Show the code
```{r se-plot-mental}
#| label: fig-forset-plot-se-mental
#| fig-cap: "Forest plot of standard error of mental health effect size estimates."
#| fig.height: 11
#| fig.retina: 2
#| fig.topcaption: TRUE
#| message: false
mental_health_dat |>
arrange(desc(study)) |>
mutate(
study = factor(study, unique(study)),
segt_pop = sqrt(vgt_pop)
) |>
ggplot(aes(x = segt_pop, y = study, color = study)) +
geom_point(aes(size = N_total), alpha = 0.5) +
scale_y_discrete() +
theme_minimal() +
labs(y = "", x = "SE") +
theme(legend.position = "none", axis.text.y = element_text(size = 10))
```Modified SE forest plot
Show the code
```{r se-plot-reintegration-modified}
#| label: fig-forset-plot-se-modified
#| fig-cap: "Forest plot of modified standard error of reintegrational effect size estimates."
#| fig.width: 6.8
#| fig.height: 7
#| fig.retina: 2
#| fig.topcaption: TRUE
#| message: false
reintegation_dat |>
arrange(desc(study)) |>
mutate(
study = factor(study, unique(study)),
Wse_pop = sqrt(Wgt_pop)
) |>
ggplot(aes(x = Wse_pop, y = study, color = study)) +
geom_point(aes(size = N_total), alpha = 0.5, position = position_jitter(height = 0.4)) +
scale_y_discrete() +
theme_minimal() +
labs(y = "", x = "Modified SE") +
theme(legend.position = "none", axis.text.y = element_text(size = 10))
```Show the code
```{r se-plot-mental-modified}
#| label: fig-forset-plot-se-mental-modified
#| fig-cap: "Forest plot of modified standard error of mental health effect size estimates."
#| fig.height: 11
#| fig.retina: 2
#| fig.topcaption: TRUE
#| message: false
mental_health_dat |>
arrange(desc(study)) |>
mutate(
study = factor(study, unique(study)),
Wse_pop = sqrt(Wgt_pop)
) |>
ggplot(aes(x = Wse_pop, y = study, color = study)) +
geom_point(aes(size = N_total), alpha = 0.5, position = position_jitter(height = 0.4)) +
scale_y_discrete() +
theme_minimal() +
labs(y = "", x = "Modified SE") +
theme(legend.position = "none", axis.text.y = element_text(size = 10))
```Inverse sampling covariance weights plot
Show the code
```{r ISCW-plot}
#| label: fig-iscw
#| fig-cap: "Plot of inverse sampling covariance (ISC) weights for each study (reintegrational outcomes)"
#| fig.width: 6.8
#| fig.height: 7
#| fig.retina: 2
#| fig.topcaption: TRUE
#| message: false
iscw <-
function(k, rho, v) {
iscw_weights <- k / (((k - 1) * rho + 1) * v)
return(iscw_weights)
}
rho_val <- round(seq(0, 0.8, 0.2), 1)
ISCW_plot <-
reintegation_dat |>
expand_grid(rho = rho_val) |>
group_by(study, rho) |>
summarise(
k = n(),
v_bar = mean(vgt_pop)
) |>
ungroup() |>
mutate(iscw_w = iscw(k, rho, v_bar),
depd = ifelse(k > 1, 1, 0)) |>
group_by(rho) |>
mutate(iscw_w_norm = iscw_w / sum(iscw_w)) |>
ungroup() |>
distinct(study, rho, iscw_w_norm, depd) |>
mutate(study = factor(study, levels = study[rho == 0.8][order(iscw_w_norm[rho == 0.8])])) |>
ggplot(aes(y = iscw_w_norm, x = study, group = factor(rho), colour = factor(rho))) +
geom_point() +
geom_line() +
theme_minimal() +
coord_flip() +
theme(
legend.position = "inside",
legend.position.inside = c(0.8, 0.2)
) +
labs(x = "", y = "Normalized Weight", colour = "Assumed Correlation")
ISCW_plot
```Show the code
```{r ISCW-plot-mental}
#| label: fig-iscw-mental
#| fig-cap: "Plot of inverse sampling covariance (ISC) weights for each study (mental healt outcomes)"
#| fig.height: 11
#| fig.retina: 2
#| fig.topcaption: TRUE
#| message: false
ISCW_plot_mental <-
mental_health_dat |>
expand_grid(rho = rho_val) |>
group_by(study, rho) |>
summarise(
k = n(),
v_bar = mean(vgt_pop)
) |>
ungroup() |>
mutate(iscw_w = iscw(k, rho, v_bar),
depd = ifelse(k > 1, 1, 0)) |>
group_by(rho) |>
mutate(iscw_w_norm = iscw_w / sum(iscw_w)) |>
ungroup() |>
distinct(study, rho, iscw_w_norm, depd) |>
mutate(study = factor(study, levels = study[rho == 0.8][order(iscw_w_norm[rho == 0.8])])) |>
ggplot(aes(y = iscw_w_norm, x = study, group = factor(rho), colour = factor(rho))) +
geom_point() +
geom_line() +
theme_minimal() +
coord_flip() +
theme(
legend.position = "inside",
legend.position.inside = c(0.85, 0.2)
) +
labs(x = "", y = "Normalized Weight", colour = "Assumed Correlation")
ISCW_plot_mental
```Effect size estimates distributions and outliers
Marginal distributions
Show the code
```{r es-distribution-table}
#| tbl-cap-location: top
#| label: tab-es-distribution
reintegation_dat$gt_pop |>
skim() |>
select(-skim_type, -skim_variable, -n_missing, -complete_rate, -numeric.hist) |>
rename_at(vars(starts_with("numeric.")), ~ str_remove(., "numeric\\.")) |>
knitr::kable(
digits = 2,
caption = "Marginal distribution of effect size estimates",
booktabs = TRUE
) |>
kable_styling(bootstrap_options = c("striped","condensed"), full_width = FALSE)
```| mean | sd | p0 | p25 | p50 | p75 | p100 |
|---|---|---|---|---|---|---|
| 0.21 | 0.28 | -0.5 | 0.03 | 0.18 | 0.38 | 1.35 |
Show the code
```{r es-distribution-table-mental}
#| tbl-cap-location: top
#| label: tab-es-distribution-mental
mental_health_dat$gt_pop |>
skim() |>
select(-skim_type, -skim_variable, -n_missing, -complete_rate, -numeric.hist) |>
rename_at(vars(starts_with("numeric.")), ~ str_remove(., "numeric\\.")) |>
knitr::kable(
digits = 2,
caption = "Marginal distribution of effect size estimates",
booktabs = TRUE
) |>
kable_styling(bootstrap_options = c("striped","condensed"), full_width = FALSE)
```| mean | sd | p0 | p25 | p50 | p75 | p100 |
|---|---|---|---|---|---|---|
| 0.28 | 0.39 | -0.64 | 0.02 | 0.21 | 0.53 | 1.8 |
Marginal distribution plots
Show the code
```{r es-distribution-plot}
#| label: fig-es-distribution
#| fig-cap: "Empirical distribution of reintegrational effect size estimates. Solid vertical lines indicate lower and upper quartiles. Dashed lines indicate the 1st quartile minus 3 times the inter-quartile range and the 3rd quartile plus 3 times the interquartile range. Effect sizes outside of the range of dashed lines would be considered outliers according to Tukey's (1977) definition."
#| fig.width: 8
#| fig.height: 2.5
#| fig.retina: 2
#| message: false
qrtls <- quantile(reintegation_dat$gt_pop, c(.25, .75), na.rm = TRUE)
fences <- qrtls + 3 * diff(qrtls) * c(-1, 1)
fence_dat <- data.frame(qrtl = qrtls, fence = fences)
es_dist_plot <-
ggplot(reintegation_dat, aes(gt_pop)) +
geom_density(fill = "cornflowerblue", alpha = 0.8) +
geom_vline(data = fence_dat, aes(xintercept = qrtl), linetype = "solid") +
geom_vline(data = fence_dat, aes(xintercept = fence), linetype = "dashed") +
geom_rug(alpha = 0.25) +
theme_minimal() +
theme(axis.title.y = element_blank()) +
labs(x = "Effect size estimate")
es_dist_plot
```Show the code
```{r es-distribution-plot-mental}
#| label: fig-es-distribution-mental
#| fig-cap: "Empirical distribution of mental health effect size estimates. Solid vertical lines indicate lower and upper quartiles. Dashed lines indicate the 1st quartile minus 3 times the inter-quartile range and the 3rd quartile plus 3 times the interquartile range. Effect sizes outside of the range of dashed lines would be considered outliers according to Tukey's (1977) definition."
#| fig.height: 4
#| fig.retina: 2
#| message: false
qrtls_mental <- quantile(mental_health_dat$gt_pop, c(.25, .75), na.rm = TRUE)
fences_mental <- qrtls_mental + 3 * diff(qrtls_mental) * c(-1, 1)
fence_dat_mental <- data.frame(qrtl = qrtls_mental, fence = fences_mental)
es_dist_plot_mental <-
ggplot(mental_health_dat, aes(gt_pop)) +
geom_density(fill = "gray", alpha = 0.8) +
geom_vline(data = fence_dat_mental, aes(xintercept = qrtl), linetype = "solid") +
geom_vline(data = fence_dat_mental, aes(xintercept = fence), linetype = "dashed") +
geom_rug(alpha = 0.25) +
theme_minimal() +
theme(axis.title.y = element_blank()) +
labs(x = "Effect size estimate")
es_dist_plot_mental
```Effect size distribution across type of outcomes
Show the code
```{r es-dist-subgroup-plot}
#| label: fig-es-distribution-reint-subgroup
#| fig-cap: "Empirical distribution of effect size estimates, by reintegrational constructs"
#| fig.retina: 2
#| message: false
outcomes_reint_dat <-
reintegation_dat |>
filter(!str_detect(analysis_plan, "Psychiatric")) |>
group_by(analysis_plan) |>
reframe(
qrtl = quantile(gt, c(.25, .75)),
fence = qrtl + 3 * diff(qrtl) * c(-1,1),
.groups = "drop"
)
reintegration_outcome_plot <-
reintegation_dat |>
#Has only one data point
filter(!str_detect(analysis_plan, "Psychiatric")) |>
ggplot(aes(x = gt_pop, fill = analysis_plan)) +
geom_density(alpha = 0.7) +
geom_vline(data = outcomes_reint_dat, aes(xintercept = qrtl), linetype = "solid")+
geom_vline(data = outcomes_reint_dat, aes(xintercept = fence), linetype = "dashed")+
geom_rug(alpha = 0.25) +
facet_wrap(~analysis_plan, ncol = 2) +
theme_minimal() +
theme(legend.position = "none", axis.title.y = element_blank(), axis.text.y = element_blank()) +
labs(x = "Effect size estimate", ); reintegration_outcome_plot
```Show the code
```{r es-dist-subgroup-plot-mental}
#| label: fig-es-distribution-mental-subgroup
#| fig-cap: "Empirical distribution of effect size estimates, by mental health constructs"
#| fig.retina: 2
#| message: false
outcome_mental_health_dat <-
mental_health_dat |>
group_by(analysis_plan) |>
reframe(
qrtl = quantile(gt, c(.25, .75)),
fence = qrtl + 3 * diff(qrtl) * c(-1,1),
.groups = "drop"
)
mental_health_outcomes_plot <-
mental_health_dat |>
ggplot(aes(x = gt_pop, fill = analysis_plan)) +
geom_density(alpha = 0.7) +
geom_vline(data = outcome_mental_health_dat, aes(xintercept = qrtl), linetype = "solid")+
geom_vline(data = outcome_mental_health_dat, aes(xintercept = fence), linetype = "dashed")+
geom_rug(alpha = 0.25) +
facet_wrap(~analysis_plan, scales = "free") +
theme_minimal() +
theme(legend.position = "none", axis.title.y = element_blank(), axis.text = element_blank()) +
labs(x = "Effect size estimate"); mental_health_outcomes_plot
```Study sample sizes versus standard error estimates
Show the code
```{r sample-vs-se}
#| label: fig-sample-vs-se
#| fig-cap: "Study sample sizes versus reintegrational standard error estimates"
#| fig.width: 6
#| fig.height: 4
#| fig.retina: 2
#| message: false
reintegation_dat |>
mutate(segt_pop = sqrt(vgt_pop)) |>
ggplot(aes(N_total, segt_pop)) +
geom_point() +
geom_smooth() +
theme_bw() +
labs(x = "Total sample size", y = "Modified standard error")
```Show the code
```{r sample-vs-se-mental}
#| label: fig-sample-vs-se-mental
#| fig-cap: "Study sample sizes versus mental health standard error estimates"
#| fig.height: 5.5
#| fig.retina: 2
#| message: false
mental_health_dat |>
mutate(segt_pop = sqrt(vgt_pop)) |>
ggplot(aes(N_total, segt_pop)) +
geom_point() +
geom_smooth() +
theme_bw() +
labs(x = "Total sample size", y = "Modified standard error")
```Standard error vs. scaled standrad error
Show the code
```{r se-vs-scaled}
#| label: fig-se-vs-scaled
#| fig-cap: "Standard error vs. modified standard errors (reintegration)"
#| fig.width: 6
#| fig.height: 4
#| fig.retina: 2
#| message: false
reintegation_dat |>
mutate(
sample_above_100 = if_else(N_total >100, "Sample > 100", "Sample < 100"),
sample_above_100 = factor(sample_above_100, levels = c( "Sample > 100", "Sample < 100")),
segt_pop = sqrt(vgt_pop),
diff_se = sqrt(Wgt_pop) - sqrt(vgt_pop)
) |>
ggplot(aes(gt_pop, diff_se, color = sample_above_100)) +
geom_point() +
geom_hline(yintercept = 0, linetype = "dashed") +
theme_bw() +
theme(
plot.caption=element_text(hjust = 0, size = 10),
legend.position= "bottom",
legend.title = element_blank(),
panel.spacing.x = unit(5, "mm"),
panel.spacing.y = unit(5, "mm"),
#panel.grid.major = element_blank(),
#panel.grid.minor = element_blank()
) +
scale_x_continuous(expand=c(0,0), breaks = seq(-1L, 1.5, 0.2)) +
scale_y_continuous(expand=c(0,0), breaks = seq(-0.1, 0.1, 0.01)) +
expand_limits(x = c(-0.6, 1.5), y = c(-0.041, 0.01)) +
labs(y = "Modified SE - SE (used in main analysis)", x = "Effect size estimate")
```Show the code
```{r se-vs-scaled-mental}
#| label: fig-se-vs-scaled-mental
#| fig-cap: "Standard error vs. modified standard errors (mental health outcomes)"
#| fig.height: 5.5
#| fig.retina: 2
#| message: false
mental_health_dat |>
mutate(
sample_above_100 = if_else(N_total >100, "Sample > 100", "Sample < 100"),
sample_above_100 = factor(sample_above_100, levels = c( "Sample > 100", "Sample < 100")),
segt_pop = sqrt(vgt_pop),
diff_se = sqrt(Wgt_pop) - sqrt(vgt_pop)
) |>
ggplot(aes(gt_pop, diff_se, color = sample_above_100)) +
geom_point() +
geom_hline(yintercept = 0, linetype = "dashed") +
theme_bw() +
theme(
plot.caption=element_text(hjust = 0, size = 10),
legend.position= "bottom",
legend.title = element_blank(),
panel.spacing.x = unit(5, "mm"),
panel.spacing.y = unit(5, "mm"),
#panel.grid.major = element_blank(),
#panel.grid.minor = element_blank()
) +
scale_x_continuous(expand=c(0,0), breaks = seq(-1L, 2, 0.2)) +
scale_y_continuous(expand=c(0,0), breaks = seq(-0.1, 0.1, 0.01)) +
expand_limits(x = c(-0.71, 2), y = c(-0.091, 0.01)) +
labs(y = "Modified SE - SE (used in main analysis)", x = "Effect size estimate")
```